2011-04-12 29 views
1

我得到我需要格式化的用戶輸入。我需要刪除所有前導/尾隨空格,我需要大寫每個單詞的第一個字母。分詞和大寫首字符

這是我正在嘗試,但是...如果你輸入的東西之間2個單詞之間的空格,它崩潰。我該如何解決這個問題?

String formattedInput = ""; 
String inputLineArray[] = inputLine.getText().toString().trim().split("\\s"); 
for (int d=0; d<inputLineArray.length; d++) { 
    formattedInput = formattedInput.trim() + " " + 
      inputLineArray[d].trim().substring(0,1).toUpperCase() + 
      inputLineArray[d].trim().substring(1).toLowerCase(); 
} 
+0

可能的解決方案http://stackoverflow.com/questions/1892765/capitalize-first-char-of-each-word-in-a-string-java – 2011-04-12 19:59:33

+0

您應該注意,您當前的代碼不符合您的聲明要求。您的要求是「大寫第一個字母」而不是「使所有其他字母小寫」。我很好奇你爲什麼讓他們都成爲小寫字母。如果我傳遞「rOgEr」,我會期望「ROgEr」而不是「Roger」。 – corsiKa 2011-04-12 20:13:10

回答

1

你的代碼是在吹多個空格,因爲當你分裂你得到你的陣列中的成員是空字符串"hello there"當分裂成爲array[0] = "hello",array[1] = "",array[2] = "there"

所以,當你做substring(0,1)你應該得到一個IndexOutOfBoundsException

嘗試將您的split("\\s")更改爲split("\\s+")這樣,您的多個空格便會在正則表達式中被拾取並拋出。

編輯:

這也將讓你擺脫.trim()你的循環中,因爲所有的空間將被分割照顧。

+0

這樣做,謝謝 – Roger 2011-04-12 20:10:56

0

記號化字符串和空間" "分裂,然後取每個迭代和利用它,然後把它再聚首

閱讀所有關於字符串標記化

+0

-1'String.split(String regex)'是爲了過時拋棄'StringTokenizer'而引入的,它比較笨重和笨拙。 – corsiKa 2011-04-12 20:04:38

+0

@ glowcoder,我在一段時間內沒有完成java,那是我學會如何分割一個字符串。用tokenizer – Neal 2011-04-12 20:05:44

相關問題