String str = " foo";
System.out.println(str.matches("\\s*foo")); //false
System.out.println(Arrays.toString(str.getBytes()));//[-30, -128, -123, 102, 111, 111]
Von oben ist das erste Zeichen nicht space
.Verwirrendes Ergebnis von java replaceAll, wenn der Anfang von Zeichenfolge mit Leerzeichen übereinstimmt
String replaceStr = str.replaceAll(".*?([a-z]*)", "$1");
System.out.println(replaceStr.equals("foo"));//false
über den Code kann nicht nur foo
bekommen.
replaceStr = str.replaceAll("^.*?([a-z]*)$", "$1");
System.out.println(replaceStr.equals("foo"));//true
warum haben ^
und $
, dann nur foo
bekommen?
Ich kopiert Ihre Zeichenfolge und das erste Zeichen ist '\ u2005' - * 2005 VIER-PER-EM SPACE *. Es gehört zur '\ p {Zs}' Kategorie. Es scheint, als ob du nur '(? U) \\ s * foo' brauchst. Siehe [diese Demo] (https://ideone.com/URLzgC) –
@ WiktorStribiżew Danke, lassen Sie mich dieses Wissen wissen. – zhuguowei
@ WiktorStribiżew aber woher weißt du '-30, -128, -123' ist' \ u2005' – zhuguowei