作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我刚刚接触 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/
判断这2个相似的Uris实际上相同的标准方法是什么? var a = new Uri("http://sample.com/sample/"); var b = new Uri("http://sam
这个问题在这里已经有了答案: Why does "true" == true show false in JavaScript? (5 个答案) 关闭 5 年前。 可能我很困惑,但我无法理解这个愚蠢
我是一名优秀的程序员,十分优秀!