2016-11-07 5 views
0

시나리오 :자바 패턴 사용

Pattern whitespace = Pattern.compile("^\\s"); 
matcher = whitespace.matcher(" WhiteSpace"); 

Pattern whitespace2 = Pattern.compile("^\\s\\s"); 
matcher2 = whitespace2.matcher(" WhiteSpace"); 

나는 줄의 시작 부분에 공백을 얻기 위해 노력하고 있어요. 정확한 공백 문자 수를 얻고 싶습니다. 내 문자열은 " WhiteSpace"입니다.
matchermatcher2이이 문자열에서 작동하지 않습니다.
단 1 공백을 얻을 패턴하지만,이 패턴은 2 공백 문자열을 작동하지해야

내가 원하는 건입니다. 아래 시나리오에서 matcher.find()matcher2.find()이 모두 해당됩니다. 그러나 matcher.find()은 거짓이어야하며 matcher2.find()이 true이어야합니다. " WhiteSpace" :

나는 정규가
내가 matcher2가 진실 할 " WhiteSpace" (두 자리)에 대한 " WhiteSpace"에 대한 허위 사실로합니다.


내가하고 싶은 일은;
문자열이 " two whitespaces"입니다.
if 문 양쪽 모두 아래에 있습니다. matcher은 false 여야합니다. matcher2이 true이어야합니다.

Pattern whitespace = Pattern.compile("^\\s"); 
matcher = whitespace.matcher(" two whitespaces"); 

Pattern whitespace2 = Pattern.compile("^\\s\\s"); 
matcher2 = whitespace2.matcher(" two whitespaces"); 

if(matcher.find()==true){ 
    //XXXXXXXXXXX 
} else if(matcher2.find()==true){ 
    //YYYYYYYYYYY 
} 

답변

1

당신이 하나의 공백 이후에는 또 다른 공백이 없는지 확인하기를 원하지만 실제로 (이 공백이었다 여부에 관계없이 경우) 경기에서 시험 할 것이다 그 두 번째 문자를 포함하지 않는 경우 , negative lookahead 메커니즘 (?!..)을 사용할 수 있습니다.

는이 공백에 의한 번호를 적용 할 수 있습니다

Pattern whitespace = Pattern.compile("^\\s(?!\\s)"); 

처럼 보일 수 있습니다 후 다른 공백이없는 경우 행의 시작 부분에서 공백 만 일치 할 수

그래서 패턴

Pattern whitespace = Pattern.compile("^\\s{3}(?!\\s)"); 
+0

감사합니다 Pshemo. – ivbtar

1

패턴이 과도 할 수 있습니다 *. Character.isWhitespace를 사용하여 간단한 코드를 얻을 : 그것이라고 *를 들어

String in = " your input here"; 
int wsPrefix=0; 
for (; wsPrefix < in.length() && Character.isWhitespace(in.charAt(wsPrefix)) ; 
     wsPrefix++) {} 
System.out.println("wsPrefix = " + wsPrefix); 

:

을 내가 알아, 정규 표현식을 사용합니다 "어떤 사람들은 문제에 직면 할 때, 생각한다". "이제 그들은 두 가지 문제가 있습니다. - Jaimie Zawinski, 1997