我正在尝试在空格和一些特定的特殊字符上拆分字符串。
给出字符串“john - & + $?。@ boy” 我想得到阵列:
array[0]="john";
array[1]="boy";
我已经尝试了几个正则表达式并且没有在哪里。这是我目前的刺:
String[] terms = uglString.split("\\s+|[\\-\\+\\$\\?\\.@&].*");
保留“约翰”但不保留“男孩”。任何人都能得到我剩下的这些吗?
答案 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+"
(一个或多个非单词字符)替换您的模式,从而使您的代码更容易。(这样您将字符列入白名单而不是黑名单,这通常是一个好主意)
答案 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运算符。