JAVA拆分-在不删除空格的情况下拆分

JAVA拆分-在不删除空格的情况下拆分,java,split,Java,Split,在不删除空白但删除所有其他非字符的情况下,我很难拆分字符串。我有一个学校的任务要用BufferedReader阅读,而文本包含了很多连eclipse都无法显示的字符。我读到的元素是element1的形式;要素2;要素3(要素4;要素5$要素6等),其中一个要移除的测力仪应为“;” 我尝试了.split(//W),但是这删除了所有的空白,并且一些元素保持完全空的状态,尽管它很好地删除了字符 现在我已经使用了.split(“[;(),$”),但是这不能正常工作,因为仍然有我无法识别的字符。您可以包含

在不删除空白但删除所有其他非字符的情况下,我很难拆分字符串。我有一个学校的任务要用
BufferedReader
阅读,而文本包含了很多连eclipse都无法显示的字符。我读到的元素是element1的形式;要素2;要素3(要素4;要素5$要素6等),其中一个要移除的测力仪应为“;”

我尝试了
.split(//W)
,但是这删除了所有的空白,并且一些元素保持完全空的状态,尽管它很好地删除了字符


现在我已经使用了
.split(“[;(),$”)
,但是这不能正常工作,因为仍然有我无法识别的字符。

您可以包含所有您想要的字符,而不是尝试对所有您不想要的字符进行拆分

String[] words = s.split("[^ a-zA-Z0-9]+");
注意:
^
表示除这些字符以外的任何字符


顺便说一句:没有一个字符是非字符。

如果您声称
\\W
对您来说效果很好,但唯一的问题是它也在空格上分割,那么您可以使用
\\W
\\S
的交集,这将删除
\\W
中的所有空格

使用
split([\\W&&\\S]+”)

另外,要删除结果周围的空白,如
\U element 3
(其中
\U
表示空白),您可以用
\\s*
环绕正则表达式。要在预定义字符类中添加对Unicode的支持,只需将
(?U)
标志添加到正则表达式中

演示:

输出:

element1
element 2
element 3
Element 4
Element 5
Element 6 

+1用于简单正则表达式。无论如何,最好从拆分中排除所有空格,以防止潜在的
元素\n10
拆分。此选项以及下面的选项将空元素保留到数组中,我可以通过创建一个方法来修复此问题(之前也这么做过,但在创建代码的过程中,我删除了它,并认为不再需要它)。或者有其他方法避免空元素吗?@PshemoI会添加您期望的空格,因为有很多空格,开发人员并不总是考虑它。@charen添加了一个
+
来跳过空元素。这不会删除前导的空元素。这似乎很好,但现在似乎//W也去掉了非ascii字符ers(我的语言使用的)所以如果我从文本文件“ä”、“ö”、“ü”或“ö”中读入,它也会从它们中分离出来。知道要添加什么以便它也跳过这些吗?嗯,它仍然从所谓的非ascii字符中分离。线程“main”java.lang中的vĆ异常。NumberFormatException:对于输入字符串:“ga kiire”
NumberFormatException
regex不会抛出
NumberFormatException
,似乎您正试图用类似于
Integer.parseInt
或类似的东西来解析
ga kiire
。现在我只能猜测您的数据/代码有什么问题。若要回答您的问题,请包括以下示例:ld用于重现您的问题。不,之所以给出NumberFormatException,是因为它从错误的位置拆分。如果没有从爱沙尼亚单词“väga kiire”中拆分此元素,则此位置会有另一个整数元素。现在导致问题的单词是“vĆga kiire”我相信。我理解这一点,但如果不知道您的数据应该如何分割,我将无法帮助您。我提供的答案解决了您现在编写的问题。正如我前面所说,您需要提供示例,让我重现您当前的问题。发布您尝试分割的数据、预期的分割结果以及如何分割实际上是分裂,所以我可以看到什么可能导致这种行为。
element1
element 2
element 3
Element 4
Element 5
Element 6