Java在空格和特殊字符上的分割

时间:2014-01-10 21:14:17

标签: java regex split

我正在尝试在空格和一些特定的特殊字符上拆分字符串。

给出字符串“john - & + $?。@ boy” 我想得到阵列:

array[0]="john";
array[1]="boy";

我已经尝试了几个正则表达式并且没有在哪里。这是我目前的刺:

String[] terms = uglString.split("\\s+|[\\-\\+\\$\\?\\.@&].*");

保留“约翰”但不保留“男孩”。任何人都能得到我剩下的这些吗?

7 个答案:

答案 0 :(得分:6)

只需使用:

String[] terms = input.split("[\\s@&.?$+-]+");

您可以在字符类中放置一个简写字符类(注意\s),大多数元字符在字符类中失去意义,除了[,{{1 },]-&。但是,\只有在成对&时才有意义,如果将&&放在字符类的开头或结尾,则将其视为文字字符。

其他语言可能有不同的规则来解析模式,但有关-的规则适用于大多数引擎。

正如@Sean Patrick Floyd在他的回答中所提到的,重要的是归结为定义一个词的构成。 Java中的-相当于\w(英文字母大写和小写,数字和下划线),因此[a-zA-Z0-9_]包含所有其他字符。如果您想考虑Unicode字母和数字,您可能需要查看Unicode character classes

答案 1 :(得分:5)

您可以使用"\\W+"(一个或多个非单词字符)替换您的模式,从而使您的代码更容易。(这样您将字符列入白名单而不是黑名单,这通常是一个好主意)

当然,使用Guava's Splitter class

可以提高效率

答案 2 :(得分:2)

尝试一下.....

Input.replace("-&+$?.@"," ").split(" ");

答案 3 :(得分:0)

要添加有关Splitter的内容,您可以执行以下操作:

    String str = "john - & + $ ? . @ boy";
    Iterable<String> ttt = Splitter.on(Pattern.compile("\\W")).trimResults().omitEmptyStrings().split(str);

答案 4 :(得分:0)

然后一步一步地打破:

对于您的情况,您替换非单词字符(如指出)。现在,您可能希望保留空格以便进行简单的String拆分。

String ugly = "john - & + $ ? . @ boy";
String words = ugly.replaceAll("[^\\w\\s]", "");

结果字符串中有很多空格,您可能希望通常只修剪1个空格:

String formatted = words.trim().replaceAll(" +", " ");

现在您可以轻松地将字符串拆分为字符串数组:

String[] terms = formatted.split("\\s");
System.out.println(terms[0]);

答案 5 :(得分:0)

使用此格式。

String s = "john - & + $ ? . @ boy";
String reg = "[!_.',@? ]";
String[] res = s.split(reg);

在此处将要分割的每个字符都放在[ ]括号内。

答案 6 :(得分:0)

您可以使用类似以下的内容

arrayOfStringType=string.split(" |'|,|.|//+|_");

'|'将在此处作为or运算符。