我按单词边界分割字符串。
我期望的是:
TOKEN 0
TOKEN 1 0
TOKEN 2
TOKEN 3 +Ve
而且,我得到的是
TOKEN 0
TOKEN 1 0
TOKEN 2 +
TOKEN 3 Ve
public void StringExample(){
String str = " 0 +Ve";
String[] token = str.split("\\b");
System.out.println("TOKEN 0 " + token[0]);
System.out.println("TOKEN 1 " + token[1]);
System.out.println("TOKEN 2 " + token[2]);
System.out.println("TOKEN 3 " + token[3]);
}
有人可以指出哪里出了问题吗?以及可能的更正(如果有),
最佳答案
一切正常,结果如预期。单词边界在字符串的第一个字符之前,字符串的最后一个字符之后,字符串中的两个字符之间匹配,其中一个是单词字符,另一个不是单词字符。最后一条规则将导致“ +”和“ V”之间的匹配,因此您的结果很有意义。
也许您想使用“向前看”和“向后看”来匹配空格旁边的任何内容。例如:
public class Foo001 {
// private static final String REGEX1 = "\\b";
private static final String REGEX2 = "(?= )|(?<= )";
public static void main(String[] args) {
String str = " 0 +Ve";
String[] tokens = str.split(REGEX2);
for (int i = 0; i < tokens.length; i++) {
System.out.printf("token %d: \"%s\"%n", i, tokens[i]);
}
}
}
这也将与第一个空格的左侧匹配,并提供额外的标记:
token 0: ""
token 1: " "
token 2: "0"
token 3: " "
token 4: "+Ve"
关于java - 正则表达式词边界,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12046394/