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

Jer*_*ams 4 java regex split

我试图在空格和一些特定的特殊字符上拆分字符串.

鉴于字符串"john - &+ $?.@ boy"我想得到数组:

array[0]="john";
array[1]="boy";
Run Code Online (Sandbox Code Playgroud)

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

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

这保留了"约翰"而不是"男孩".任何人都能得到我剩下的这个吗?

nha*_*tdh 7

只需使用:

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

你可以把短手字符类字符类(注意内\s),而且大多数元字符失去其含义的字符类中,除[,],-,&,\.但是,&只有在成对时才有意义&&,-如果放在字符类的开头或结尾,则将其视为文字字符.

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

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


Sea*_*oyd 5

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

当然,事情可能通过使用更有效率番石榴的Splitter