2013-10-09 112 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