如何根据标点符号和空格拆分字符串?

7

我有一个String字符串,想要根据标点符号和空格进行分割。应该使用什么正则表达式作为split()方法的参数?

3个回答

16
使用一些处理奇怪情况的代码:(请注意,在输出循环中跳过空令牌。这是快速简单的方法。)您可以将需要拆分和删除的任何字符添加到正则表达式模式中。(tchrist是正确的。\s 这个东西实现得非常糟糕,只在某些非常简单的情况下有效。)
public class SomeClass {
    public static void main(String args[]) {
        String input = "The\rquick!brown  - fox\t\tjumped?over;the,lazy\n,,..  \nsleeping___dog.";

        for (String s: input.split("[\\p{P} \\t\\n\\r]")){
            if (s.equals("")) continue;
            System.out.println(s);
        }
    }
}


INPUT:

The
quick!brown  - fox      jumped?over;the,lazy
,,..  
sleeping___dog.

OUTPUT:

The
quick
brown
fox
jumped
over
the
lazy
sleeping
dog

你不能用一个更短的句子吗?;-) - Neil
谢谢,但是这仍然将换行符视为可标记化的单词。你知道如何排除它吗? - andandandand
@omgzor:只需在要拆分的字符列表中添加一个换行符即可。请参见上面更新的代码示例。(如果您的数据中除了换行符还有回车符,则还需要添加 \r。) - Paul Sasik
2
嗯,不对。\pP匹配所有标点符号,但\s并不匹配所有空格。实际上,它忽略了其中的20个。Java的字符类快捷方式有问题。\s的正确模式是"[\u0009\u000A-\u000D\u0020\u0085\u00A0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]". - tchrist
1
@Paul Sasik,“乌鸦喜欢我那巨大的石英斯芬克斯”是我在http://en.wikipedia.org/wiki/List_of_pangrams中认为最简短且连贯的一个。 - Neil
显示剩余3条评论

0
尝试像这样做:
String myString = "item1, item2, item3";
String[] tokens = myString.split(", ");
for (String t : tokens){
            System.out.println(t);
        }

/*output
item1
item2
item3
*/

-3
str.split(" ,.!?;") 

对于英语来说,这是一个不错的开始。你需要根据数据和所使用的语言进行改进。


-1 这不起作用,因为正则表达式没有正确声明。它将查找字符串中的字符系列 " ,.!?;" 而不是单个字符进行拆分。 - Paul Sasik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接