Java에서 정규식을 사용하는 중입니다. 책과 Java 문서를 읽고 있는데, 이유는 알 수 없습니다. "[\\s*]"
은 구분 기호로 사용할 때 "\\s*"
과 같지 않습니다. "[\\s*]"
은 "\\s+"
과 같습니다. 누군가가 논리적으로 왜 나를 걸을 수 있습니까?[\ s *]가 \ s *와 같은 이유는 무엇입니까?
import java.util.Scanner;
import java.util.regex.Pattern;
public class ScanString {
public static void main(String[] args) {
String str = "Smith , where Jones had had 'had', had had 'had had'.";
String regex = "had";
System.out.println("String is:\n" + str + "\nToken sought is " + regex);
Pattern had = Pattern.compile(regex);
Scanner strScan = new Scanner(str);
strScan.useDelimiter("\\s*");
int hadCount = 0;
while(strScan.hasNext()) {
if(strScan.hasNext(had)) {
++hadCount;
System.out.println("Token found!: " + strScan.next(had));
} else {
System.out.println("Token is : " + strScan.next());
}
}
System.out.println("Count is: " + hadCount);
}
}
나에게 맞는 출력은 모든 공백이 아닌 문자를 별도의 토큰으로 사용합니다. 구분 기호가 "\\s+"
또는 "[\\s*]"
으로 변경되면 출력은 문자 클래스를 묶는
String is:
Smith , where Jones had had 'had', had had 'had had'.
Token sought is had
Token is : Smith
Token is : ,
Token is : where
Token is : Jones
Token found!: had
Token found!: had
Token is : 'had',
Token found!: had
Token found!: had
Token is : 'had
Token is : had'.
Count is: 4
흥미 롭다 - 내 책의 저자는 오해의 소지가있다! 그는 특수 문자로 의도 된 대괄호 안의 *를 사용했지만 어쨌든 예제는 작동했습니다. –
@svenoaks - yea. '[*]'를 사용하는 것은 조금 비 재래 적입니다. 그러나 기능적으로는'\ *'와 동등하지만 자바 문자열 리터럴에'\\ *'로 써야합니다. 괄호로 묶은 버전이 더 읽기 쉽다고 주장 할 수 있습니다. –