String lower = Name.toLowerCase();
int a = Name.indexOf(" ",0);
String first = lower.substring(0, a);
String last = lower.substring(a+1);
char f = first.charAt(0);
char l = last.charAt(0);
System.out.println(l);
如何將F和L變量轉換爲大寫。將字符轉換爲大寫
String lower = Name.toLowerCase();
int a = Name.indexOf(" ",0);
String first = lower.substring(0, a);
String last = lower.substring(a+1);
char f = first.charAt(0);
char l = last.charAt(0);
System.out.println(l);
如何將F和L變量轉換爲大寫。將字符轉換爲大寫
f = Character.toUpperCase(f);
l = Character.toUpperCase(l);
看看java.lang.Character
類,它提供了很多有用的方法來轉換或測試字符。
+1我喜歡提供給用戶的參考答案去尋找答案 – 2010-09-12 20:24:00
-1,如果我們爲學生拉網,我們刪除了一個主要的好處。不要花費過多的時間跟隨人們在斷開的鏈接上嵌套引用。 – ebt 2014-01-18 16:48:22
您可以使用Character#toUpperCase()
。
char fUpper = Character.toUpperCase(f);
char lUpper = Character.toUpperCase(l);
它然而一些限制,因爲世界是知道的更多的字符比以往任何時候都能夠適應16位char
範圍。請參閱javadoc的以下摘錄:
注意:此方法無法處理supplementary characters。要支持所有Unicode字符(包括補充字符),請使用
toUpperCase(int)
方法。
對你的情況最簡單的辦法 - 改第一線,讓它做的正好相反的事:
String lower = Name.toUpperCase();
。當然,這是值得太多更改其名稱。
如果你要包括在您的項目不是簡單的解決方案在Apache Commons Lang中罐子是做:
WordUtils.capitalize(Name)
負責所有的髒活的爲您服務。 查看javadoc here
或者,您還有一個大寫字母(String)方法,它也會降低其他字符的大小寫。
既然你知道字符都較低的情況下,你可以減去根據ASCII值,使他們大寫:
char a = 'a';
a -= 32;
System.out.println("a is " + a); //a is A
這裏是參考
這隻適用於字符串只由ASCII字符組成的情況。諸如法語,希臘語,西班牙語,土耳其語等語言具有帶上/下格式的非ASCII字符。這種方法在這些情況下不起作用... – 2015-02-08 03:08:03
實際上,這種基本方法*可用於法語,西班牙語,德語等最常見的非ASCII字符。 'é''à''ö''û''ñ'...所以如果OP知道他只需要處理這些角色,爲了簡單和性能的考慮,他可以堅持這種方法。 – 2015-10-13 13:18:23
用字符進行計算來改變案例是最糟糕的習慣之一,所以不是21世紀!有超過ascii字符! – Floyd 2015-12-17 08:49:28
您可以將.toUpperCase的ASCII table()直接在字符串變量上或作爲文本字段的屬性。例如: -
String str;
TextView txt;
str.toUpperCase();// will change it to all upper case OR
txt.append(str.toUpperCase());
txt.setText(str.toUpperCase());
而不是使用現有的實用程序,您可以使用布爾運算試試下面的轉換:
爲大寫:
char upperChar = 'l' & 0x5f
爲小寫:
char lowerChar = 'L'^0x20
它是如何工作的:
二進制,十六進制和十進制表:
------------------------------------------
| Binary | Hexadecimal | Decimal |
-----------------------------------------
| 1011111 | 0x5f | 95 |
------------------------------------------
| 100000 | 0x20 | 32 |
------------------------------------------
讓我們的小l
爲例L
轉換:
二進制與操作:(l & 0x5f)
l
字符有ASCII 108和01101100
是二進制表示。
1101100
& 1011111
-----------
1001100 = 76 in decimal which is **ASCII** code of L
同樣的L
到l
轉換:
二進制XOR運算:(L^0x20)
1001100
^ 0100000
-----------
1101100 = 108 in decimal which is **ASCII** code of l
我真的很震驚,這有7票。雖然我贊成聰明的做法,但聰明的做法很少會導致可維護的代碼,特別是當用於代替像Character.toUpperCase()這樣的內置方法時。這個任何用戶應該明白它不會處理任何非ASCII。 – 2017-09-06 15:52:17
@AdamHewitt這種方法也適用於非ASCII字符,例如'250',然而,很少非ASCII字符不會給出預期的結果。您的觀點是正確的,用戶應該理解這種方法的正確用法,它應該主要用於英文字母。 – 2017-09-06 17:37:41
我認爲它應該是'c | 0x20'代替小寫的'c^0x20'。否則,如果字符已經是小寫字母,那麼您的代碼會將其轉換爲大寫字母 – 2018-02-16 01:52:07
System.out.println(first.substring(0,1).toUpperCase());
System.out.println(last.substring(0,1).toUpperCase());
您能否解釋您的答案? – soundslikeodd 2017-01-08 05:29:01
first.substring(0,1)將檢索位於字符串0索引處的子字符串,然後將toUpperCase方法應用於該字符串,該字符串會將該字符串中的第一個字符作爲大寫字母 – 2017-01-08 13:59:04
請編輯您的答案並添加此解釋。 – soundslikeodd 2017-01-08 17:03:38
我想你想利用每個單詞的第一個和最後一個字符用空格作爲分隔符。
可通過StringBuffer
來完成:
public static String toFirstLastCharUpperAll(String string){
StringBuffer sb=new StringBuffer(string);
for(int i=0;i<sb.length();i++)
if(i==0 || sb.charAt(i-1)==' ' //for first character of string/each word
|| i==sb.length()-1 || sb.charAt(i+1)==' ') //for last character of string/each word
sb.setCharAt(i, Character.toUpperCase(sb.charAt(i)));
return sb.toString();
}
感謝您的幫助,我得到笏我需要回答您剛纔的問題,你不明白的 – shep 2010-09-12 20:24:00
哪一部分?我的答案包含了對這個問題的回答。 – Bozho 2010-09-12 20:24:47
@shep - 你能接受BalusC的回答嗎?這將有助於未來的搜索者。 – AjahnCharles 2017-10-09 02:19:15