拆分字符串,保留所有尾随空元素

时间:2015-12-02 10:38:35

标签: java regex

我对java编程比较陌生。你会如何分割由分号分隔的以下字符串?

String; String; String; String, String; String;;String;
String; String; String; ;String;String;String;String

我想将每个String作为参数传递给构造函数(来自txt文件),但我无法为此目的找到可通过的正则表达式。构造函数有8个String参数(从两个分号;;之间没有任何内容,我想获得一个空字符串)。在这种情况下,将创建两个单独的对象。我知道分裂一个字符串通常是如何工作的,但这对我来说似乎太棘手了。

3 个答案:

答案 0 :(得分:3)

您的答案位于javadoc

String toto = "A;B;C;D";

String[] tokens = toto.split(";");

答案 1 :(得分:3)

问题是String.Split没有保留尾随的空元素:

  

因此,结尾的空字符串不包含在结果数组中。

要包含它们,请使用-1作为第二个参数(请参阅demo):

String s  = "String; String; String; String, String; String;;String;";
System.out.println(Arrays.toString(s.split(";", -1)));

请参阅此Java reference

  

<强> public String[] split(String regex, int limit)
   limit 参数控制模式的应用次数,因此会影响结果数组的长度... 如果n为非正数,那么模式将被应用尽可能多次,并且数组可以具有任何长度 。如果n为零,那么模式将被应用尽可能多次,数组可以具有任何长度,尾随空字符串将被丢弃

答案 2 :(得分:1)

由于您声明要包含空格,只能在;上拆分并希望为构造函数保留8个参数,我们将使用限制方法进行拆分。

String.split(String,int)

示例:

String in = "String; String; String; String, String; String;;String;";
String[] s1 = in.split(";");

给出:

["String"," String"," String, String"," String"," String","","String"]

7的长度是什么?失败你的构造函数。

String[] s = in.split(";",8);

给予:

["String"," String"," String"," String, String"," String","","String",""]`

什么是8长度并且可以工作。

然后,您可以使用以下命令来解决构造函数:

YourObject obj = new YourObject(s[0],s[1],s[2],s[3],s[4],s[5],s[6],s[7]);