String s[] = {"\\s","\\S"};
for (int i=0;i<s.length;i++)
{
System.out.println("");
Pattern p2 = Pattern.compile(s[i]);
String tobeMatched = "sabc" + "\t" + "\t"+"abc dfg";
Matcher m2 = p2.matcher(tobeMatched);
System.out.println("expression:" + m2.pattern());
System.out.println(tobeMatched);
System.out.println("012345678901234567890123456789");
System.out.print("Position found:");
while (m2.find())
{
System.out.print(m2.start()); System.out.print(" ");
}
}
如果你看到下面的输出 - 当你打印tobeSearched字符串时,TAB字符占用4个空格,但matcher.find()只返回1个空格用于TAB,第二个TAB返回到位置5.我期待包括TAB在内的空格由matcher.start()在4,8和9位找到。
有人可以在这里解释matcher.find()和matcher.start()在TAB字符中使用的逻辑。
输出
expression:\s
sabc abc dfg
012345678901234567890123456789
Position found:4 5 9
expression:\S
sabc abc dfg
012345678901234567890123456789
Position found:0 1 2 3 6 7 8 10 11 12
答案 0 :(得分:3)
我觉得你误会了。 \ s不代表“空间”,而是代表“空白”字符。
空格和制表符都是一个空白字符。 在ASCII中,空格具有charcode 0x20,tab具有0x0b。