2013-10-09 4 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 문자열에 선행 또는 후행 공백이 없으면 ** ._ "그래서 값 대신 같음을 확인할 수 있습니다. 그래도 String을 처리 할 때 개인적으로'.equals'을 사용 하겠지만, 언급 할 가치가 있다고 생각했습니다. :) –

4

당신 대신 당신이 제안한 "\\ s의 +"정규식의 Character.isWhitespace를 사용 할 수 있습니다. 그런데

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

참. 나는 자바 프로그래머가 아니므로, -1이 문자열의 유효한 인덱스 였는지 확실하지 않았습니다. 나는 대부분 OP만이 더 좋은 아이디어를 얻을 수 있도록'Character.isWhitespace'를 원래 코드에 넣었습니다. –

+0

코드를 잘못 복사 한 것 같습니다. 루비를 너무 많이하고 있습니다. –

0

"\\s+" 이유는 정규식으로 확인하려면 Java의 Regex 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