0
String str = " foo";
System.out.println(str.matches("\\s*foo")); //false
System.out.println(Arrays.toString(str.getBytes()));//[-30, -128, -123, 102, 111, 111]
從上面,第一個字符不是space
。混淆java替換的結果當匹配空格的字符串開始
String replaceStr = str.replaceAll(".*?([a-z]*)", "$1");
System.out.println(replaceStr.equals("foo"));//false
上面的代碼只能得到foo
。
replaceStr = str.replaceAll("^.*?([a-z]*)$", "$1");
System.out.println(replaceStr.equals("foo"));//true
爲什麼有^
和$
,然後才能得到的只有foo
?
我複製/粘貼了你的字符串,第一個字符是'\ u2005' - * 2005 FOUR-PER-EM SPACE *。它屬於'\ p {Zs}'類別。好像你只需要'(?U)\\ s * foo'。請參閱[本演示](https://ideone.com/URLzgC) –
@WiktorStribiżew謝謝,讓我知道這些知識。 – zhuguowei
@WiktorStribiżew,但你怎麼知道'-30,-128,-123'是'\ u2005' – zhuguowei