2010-09-12 84 views
57
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變量轉換爲大寫。將字符轉換爲大寫

+0

感謝您的幫助,我得到笏我需要回答您剛纔的問題,你不明白的 – shep 2010-09-12 20:24:00

+0

哪一部分?我的答案包含了對這個問題的回答。 – Bozho 2010-09-12 20:24:47

+0

@shep - 你能接受BalusC的回答嗎?這將有助於未來的搜索者。 – AjahnCharles 2017-10-09 02:19:15

回答

12
f = Character.toUpperCase(f); 
l = Character.toUpperCase(l); 
16

看看java.lang.Character類,它提供了很多有用的方法來轉換或測試字符。

+1

+1我喜歡提供給用戶的參考答案去尋找答案 – 2010-09-12 20:24:00

+1

-1,如果我們爲學生拉網,我們刪除了一個主要的好處。不要花費過多的時間跟隨人們在斷開的鏈接上嵌套引用。 – ebt 2014-01-18 16:48:22

116

您可以使用Character#toUpperCase()

char fUpper = Character.toUpperCase(f); 
char lUpper = Character.toUpperCase(l); 

它然而一些限制,因爲世界是知道的更多的字符比以往任何時候都能夠適應16位char範圍。請參閱javadoc的以下摘錄:

注意:此方法無法處理supplementary characters。要支持所有Unicode字符(包括補充字符),請使用toUpperCase(int)方法。

-1

對你的情況最簡單的辦法 - 改第一線,讓它做的正好相反的事:

String lower = Name.toUpperCase(); 

。當然,這是值得太多更改其名稱。

1

如果你要包括在您的項目不是簡單的解決方案在Apache Commons Lang中罐子是做:

WordUtils.capitalize(Name) 

負責所有的髒活的爲您服務。 查看javadoc here

或者,您還有一個大寫字母(String)方法,它也會降低其他字符的大小寫。

+0

您提供的[link](http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/WordUtils.html#capitalize%28java.lang.String%29)給出404錯誤! !你能糾正它嗎? – Visruth 2013-07-05 10:50:28

+0

修正了,謝謝了 – Asaf 2013-07-06 21:55:54

0

既然你知道字符都較低的情況下,你可以減去根據ASCII值,使他們大寫:

char a = 'a'; 
a -= 32; 
System.out.println("a is " + a); //a is A 

這裏是參考

+4

這隻適用於字符串只由ASCII字符組成的情況。諸如法語,希臘語,西班牙語,土耳其語等語言具有帶上/下格式的非ASCII字符。這種方法在這些情況下不起作用... – 2015-02-08 03:08:03

+0

實際上,這種基本方法*可用於法語,西班牙語,德語等最常見的非ASCII字符。 'é''à''ö''û''ñ'...所以如果OP知道他只需要處理這些角色,爲了簡單和性能的考慮,他可以堅持這種方法。 – 2015-10-13 13:18:23

+1

用字符進行計算來改變案例是最糟糕的習慣之一,所以不是21世紀!有超過ascii字符! – Floyd 2015-12-17 08:49:28

2

您可以將.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()); 
12

而不是使用現有的實用程序,您可以使用布爾運算試試下面的轉換:

爲大寫:

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 

同樣的Ll轉換:

二進制XOR運算:(L^0x20)

1001100 
^ 0100000 
----------- 
    1101100 = 108 in decimal which is **ASCII** code of l 
+2

我真的很震驚,這有7票。雖然我贊成聰明的做法,但聰明的做法很少會導致可維護的代碼,特別是當用於代替像Character.toUpperCase()這樣的內置方法時。這個任何用戶應該明白它不會處理任何非ASCII。 – 2017-09-06 15:52:17

+1

@AdamHewitt這種方法也適用於非ASCII字符,例如'250',然而,很少非ASCII字符不會給出預期的結果。您的觀點是正確的,用戶應該理解這種方法的正確用法,它應該主要用於英文字母。 – 2017-09-06 17:37:41

+0

我認爲它應該是'c | 0x20'代替小寫的'c^0x20'。否則,如果字符已經是小寫字母,那麼您的代碼會將其轉換爲大寫字母 – 2018-02-16 01:52:07

2
System.out.println(first.substring(0,1).toUpperCase()); 
System.out.println(last.substring(0,1).toUpperCase()); 
+1

您能否解釋您的答案? – soundslikeodd 2017-01-08 05:29:01

+0

first.substring(0,1)將檢索位於字符串0索引處的子字符串,然後將toUpperCase方法應用於該字符串,該字符串會將該字符串中的第一個字符作爲大寫字母 – 2017-01-08 13:59:04

+1

請編輯您的答案並添加此解釋。 – soundslikeodd 2017-01-08 17:03:38

1

我想你想利用每個單詞的第一個和最後一個字符用空格作爲分隔符。

可通過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(); 
}