用正则表达式拆分字符串。 Java的

时间:2015-02-17 17:01:05

标签: java regex arraylist split

我试图用单词填充ArrayList,但有时它会添加一个空字符,为什么?我怎么能避免这个?

    ArrayList<String> textAL = new ArrayList<String>();
    String text = "This.IS(a) text example blah? bl:ah";
    String regex = "[\\s\\?\\.,:;\\)\\(]";

    String[] splittedText = text.split(regex);

    for(int i = 0; i < splittedText.length; i++){
        if(splittedText[i] != " "){  //ignore whitespace
            textAL.add(splittedText[i]);
        }           
    }

    for(int i = 0; i < textAL.size(); i++){
        System.out.println("t2(" + i + ") "+ textAL.get(i));
    }

结果:

textAL(0) This
textAL(1) IS
textAL(2) a
textAL(3) 
textAL(4) text
textAL(5) example
textAL(6) blah
textAL(7) 
textAL(8) bl
textAL(9) 
textAL(10) ah

3 个答案:

答案 0 :(得分:2)

您需要为Pattern添加量词:

String text = "This.IS(a) text example blah? bl:ah";
// Edit: now with removed escapes when not necessary - thanks hwnd
//              ┌ original character class
//              |          ┌ greedy quantifier: "one or more times"
//              |          |
String regex = "[\\s?.:;)(]+";
String[] splittedText = text.split(regex);
System.out.println(Arrays.toString(splittedText));

<强>输出

[This, IS, a, text, example, blah, bl, ah]

答案 1 :(得分:1)

我认为问题在于你忘记了正则表达式末尾的+,例如,

String regex = "[\\s\\?\\.,:;\\)\\(]+"

但是如

那样简单
String regex = "\\W+";

请注意,\\W^\\w

相同

测试:

public static void main(String[] args) {
  ArrayList
  <String> textAL = new ArrayList<String>();
  String text = "This.IS(a) text example blah? bl:ah";
  // String regex = "[\\s\\?\\.,:;\\)\\(]+";
  String regex = "\\W+";

  String[] splittedText = text.split(regex);

  for(int i = 0; i < splittedText.length; i++){
      textAL.add(splittedText[i]);
  }

  for(int i = 0; i < textAL.size(); i++){
      System.out.println("t2(" + i + ") "+ textAL.get(i));
  }
}

结果:

t2(0) This
t2(1) IS
t2(2) a
t2(3) text
t2(4) example
t2(5) blah
t2(6) bl
t2(7) ah

修改

您的其他问题在这里:

splittedText[i] != " "

您正在使用!=运算符比较字符串,而您绝不想使用==!=来比较字符串。相反,请使用equals(...)equalsIgnoreCase(...)方法。理解==!=检查两个对象是否相同而不是您感兴趣的。另一方面,这些方法检查两个字符串是否具有相同的字符相同的顺序,这就是重要的事情。

幸运的是,如果您使用正确的正则表达式,上述内容对于您当前的代码来说不会成为问题,但是在将来的代码中可能会成为一个问题,所以请务必牢记这一点。

答案 2 :(得分:0)

String regex = "[^\\w]+";如何做到这一点,以便您可以添加自己不想要匹配的角色,比如撇号"[^\\w']+"