私はJavaで正規表現を始めたばかりで、本とJavaドキュメントを読んでいます。次のプログラムを考えると、区切り文字として使用した場合"[\\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