gpt4 book ai didi

java - 为什么 [\\s*] 不等同于\\s*?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:50:51 26 4
gpt4 key购买 nike

我刚刚接触 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

最佳答案

方括号 [] 包含一个字符类。在它们内部,关于特殊字符的规则是不同的。唯一的特殊字符是“右括号 (])、反斜杠 (\)、插入符 (^) 和连字符 ( -)。” (取自this page)

所以在这种情况下 [\\s*] 表示“空格或 *”。

处理正则表达式时,可以使用像RegexPlanet 这样的网站。 (测试您的代码)或 Regexper (以图形方式可视化正则表达式)。

关于java - 为什么 [\\s*] 不等同于\\s*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15318241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com