我按单词边界分割字符串。

我期望的是:

 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/

10-12 23:04