2013-10-09 143 views
1

我正在嘗試編寫一個函數來檢查前導和尾隨空格。它不應該刪除它們,只是檢查它們是否存在。我寫了這個:檢查前導空白/尾隨空白

public static String checkWhitespace(String str) 
    { 
     if(str.charAt(0) == ' ' || str.charAt(str.length()-1) == ' '); 
      return "invalid"; 
    } 

但它捕捉的一切。我嘗試使用"\\s+"作爲關鍵,但它是一個字符串,它只是讓我檢查字符。任何幫助都是極好的!

回答

7

你可以做

return str.trim().equals(str) ? "valid": "invalid"; 
+2

尼斯oneliner(和壞瞄準在我手裏,我不小心downvoted :)) – ppeterka

+0

有趣的事實:你也可以使用'str.trim()== str'因爲['字符串#trim'] (https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#trim())返回「_這個字符串的副本,刪除了前導和尾隨空白,或** this字符串,如果它沒有前導或尾隨空白** ._「因此可以檢查參考值是否相等而不是值。雖然在處理字符串時仍然會使用'.equals',但認爲這是值得一提的。 :) –

4

可以使用Character.isWhitespace代替 「\\ S +」 正則表達式你的建議。

public static String checkWhitespace(String str) { 
    if (Character.isWhitespace(str.charAt(0)) || Character.isWhitespace(str.charAt(str.length() - 1))) { 
     return "invalid"; 
    } 
} 

順便說一句,在if語句的結束分號可能是什麼絆倒你。這會導致它始終執行return "invalid"

+0

Ehem,'charAt(-1)'不起作用。你也沒有檢查有效的索引('str'可能是空的)。 – Neet

+0

是的。我不是一個java程序員,所以我不確定如果-1是一個字符串上的有效索引。我大部分只是把'Character.isWhitespace'放到原始代碼中,所以OP可以得到一個更好的想法。 –

+0

哎呀,看起來像我抄錯了代碼。做了太多的紅寶石。 –

0

原因"\\s+"不起作用是因爲您需要使用Java的正則表達式Matcher \ Pattern類來檢查正則表達式。

String input = " blah "; 
String regexLeadingWhitespace = "\\s+.*"; 
String regexTrailingWhitespace = ".*\\s+"; 

boolean leadingMatches = Pattern.matches(regexLeadingWhitespace, input); 
boolean trailingMatches = Pattern.matches(regexTrailingWhitespace, input); 

聲明:我認爲我的正則表達式是正確的,但我可能是錯的,我還沒有機會測試它們。

Java Regex Matacher Tutorial