有一个问题是在java中使用正则表达式在空格/标点符号周围分割字符串

时间:2012-09-05 20:51:25

标签: java regex

基本上我有一堆大字符串,我想删除空格/标点符号/数字,我只想要单词。

这是我的代码:

String str = "hughes/conserdyne corp, unit <hughes capital corp> made bear stearns <bsc> exclusive investment banker develop market 2,188,933 financing design installation micro-utility systems municipalities. company systems self-contained electrical generating facilities alternate power sources, photovoltaic cells, replace public utility power sources.";
        String[] arr = str.split("[\\p{P}\\s\\t\\n\\r<>\\d]");
        for (int i = 0; i < arr.length; i++) {
                    if(arr[i] != null)
                 System.out.println(arr[i]);
        }

这是我得到的输出:

hughes
conserdyne
corp

unit

lt
hughes
capital
corp

made
bear
stearns

lt
bsc

exclusive
investment
banker
develop
market










financing
design
installation
micro
utility
systems
municipalities

company
systems
self
contained
electrical
generating
facilities
alternate
power
sources

photovoltaic
cells

replace
public
utility
power
sources

正如你所看到的那样,有很多空白区域,而且出现了逗号和数字。如果打印条件不正确,我会得到这个。

然而,如果我将所有arr的内容连接成一个新的字符串,然后用正则表达式“\ s +”将其拆分,它就可以正常输出。

那么我目前的正则表达式有什么问题?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您应该只能在正则表达式的末尾抛出+

 String[] arr = str.split("[\\p{P}\\s\\t\\n\\r<>\\d]");

要:

 String[] arr = str.split("[\\p{P}\\s\\t\\n\\r<>\\d]+");
                                                 // ^-- This guy

添加+表示匹配前一个元素中的一个或多个,因此如果连续有多个“中断字符”,它们将被视为单个分隔符,您将不会获得空字符串在你的结果中。