Java 使用空数据拆分字符串

Java 使用空数据拆分字符串,java,android,arrays,string,split,Java,Android,Arrays,String,Split,我正在为我的公司在Java(Android平台)上开发一个应用程序,遇到了一个我无法解决的问题。 事情是这样的:通过读取文本文件我用以下内容填充内容字符串: String content = ""; content = buffReader.readLine(); buffReader.close(); 这工作做得很好。content字符串正确地填充了文件内容。这个字符串的每一行数据都用&字符分隔,因此我将行数组填充如下: String[] lines; lines = content.sp

我正在为我的公司在
Java
Android
平台)上开发一个应用程序,遇到了一个我无法解决的问题。 事情是这样的:通过读取
文本文件
我用以下内容填充
内容
字符串:

String content = "";
content = buffReader.readLine(); buffReader.close();
这工作做得很好。
content
字符串正确地填充了文件内容。这个字符串的每一行数据都用
&
字符分隔,因此我将
数组填充如下:

String[] lines; 
lines = content.split("&");
同样,这里没有错误。然后,每个字段用
字符分隔,我再次尝试用相同的方式填充下一个字符串:

String line; String[] data;
String data1 = ""; String data2 = ""; String data3 = ""; String data4 = "";

for (int i = 0; i < lines.length; i++){
    line = lines[i];
    data = line.split(":");
    data1 = data[0];
    data2 = data[1];
    data3 = data[2];
    data4 = data[3];
}
字符串行;字符串[]数据;
字符串data1=“”;字符串data2=“”;字符串data3=“”;字符串data4=“”;
对于(int i=0;i
如果文本是
A:B:C:D
,代码工作正常。即使文本是
A:B::D
,也没关系(而且
data3
变成了我想要的
)。但是,如果文本是
A::
,则代码不起作用并关闭应用程序。在这种情况下,我可以获得
data1=data[0]
,但对于其他每个步骤,都会显示错误

有人知道发生了什么吗?!我是不是遗漏了什么?非常感谢

编辑:


如果有人能解释为什么代码可以与
A:B::D
text一起正常工作。。。我是说!它确实有一个空字段,对吗?

您应该像这样使用split来防止删除空值

for (int i = 0; i < lines.length; i++){
    line = lines[i];
    data = line.split(":",-1);
    data1 = data[0];
    data2 = data[1];
    data3 = data[2];
    data4 = data[3];
}
for(int i=0;i
如果n为非正,则图案将被应用尽可能多的次数,并且阵列可以具有任意长度


“不行”。。你能更具体一点吗?@Stultuske,它关闭了应用程序。@Pspl错误是什么?更具体一点。我猜你得到的是IndexOutOfBoundsException,因为默认情况下,
split
会删除空的尾随字符串,所以对于
A::
结果数组将只包含
{“A”
而不是
{>{“A”,“A”,“,,,,,,,,,,,,,,,
(如果没有索引,1,2,3)。如果使用“>代码>拆分(“:”,-1)< /代码>,因为它删除了后面的空字符串,而不是非空元素中间的字符串。例如,如果你有<代码> A:B::/Cord:>首先它将被分成数组<代码> {“a”、“b”、“b”、“}”、“}”。
但由于通常我们不需要最后一个空值(比如当我们基于行分隔符分割文本文件时,它的末尾有一些额外的空行),Java作者决定自动从末尾删除该空字符串(因为Java 8有时甚至从前面删除-)。因此,它创建并返回另一个较小的数组,而不包含该“副产品”。