Java 将分号文件拆分为数组,这很奇怪

Java 将分号文件拆分为数组,这很奇怪,java,arrays,Java,Arrays,我想拆分一个单词字符串,这样每个单词都用分号拆分成一个数组 为什么这根绳子的长度只有2?如何使数组的长度始终为6,因为文件中的每一行都分为6个字段,用分号分隔。固定长度的数组将使创建对象更容易 String line = "Name;Phone;;;;;"; String parts[] = line.split(";"); 在这种情况下,零件的长度将为2。我认为您需要使用 String parts[] = line.split(";",6); 正如您从中看到的,您可以对拆分方法实施限制。我

我想拆分一个单词字符串,这样每个单词都用分号拆分成一个数组

为什么这根绳子的长度只有2?如何使数组的长度始终为6,因为文件中的每一行都分为6个字段,用分号分隔。固定长度的数组将使创建对象更容易

String line = "Name;Phone;;;;;";
String parts[] = line.split(";");

在这种情况下,零件的长度将为2。

我认为您需要使用

String parts[] = line.split(";",6);

正如您从中看到的,您可以对拆分方法实施限制。

我认为您需要使用

String parts[] = line.split(";",6);
从中可以看出,您可以对拆分方法进行限制。

我建议使用

具体而言,我将使用以下两种方法之一:

splitPreserveAllTokens(String str, String separatorChars) 
splitPreserveAllTokens(String str, String separatorChars, int max) 
这些方法将在数组中保留空令牌。第二个选项将强制您的结果具有最大大小(例如,6),但如果字数超过限制,则可能导致您的最终标记包含分隔符。

我建议使用

具体而言,我将使用以下两种方法之一:

splitPreserveAllTokens(String str, String separatorChars) 
splitPreserveAllTokens(String str, String separatorChars, int max) 

这些方法将在数组中保留空令牌。第二种方法将强制您的结果具有最大大小(例如6),但如果字数超过限制,则可能会导致您的最终标记包含分隔符。

您可以先声明数组,如下所示

  String parts[] = new string[6];

您可以像这样首先声明数组

  String parts[] = new string[6];
该方法的文档提到跳过了尾随的空字符串

您可以尝试以下操作以保持尾随空字符串:

String parts[] = line.split(";", -1);
该方法的文档提到跳过了尾随的空字符串

您可以尝试以下操作以保持尾随空字符串:

String parts[] = line.split(";", -1);
尝试
line.split(;”,-1)

尝试
line.split(;”,-1)

使用它有一个高级拆分器

Splitter.on(';')
       .trimResults()
       .omitEmptyStrings()
       .split("Name;Phone;;;;;");
使用它有一个先进的拆分器

Splitter.on(';')
       .trimResults()
       .omitEmptyStrings()
       .split("Name;Phone;;;;;");


但这并不强制数组大小为6,它只是限制了它。@Jon True。但是,如果它始终是6个字段,用分号分隔,如问题状态,则结果的长度将始终为6。但这并不强制数组的大小为6,它只会限制它。@Jon True。但是,如果始终是6个字段,用分号分隔,如问题所述,则结果的长度始终为6。这并不强制数组的大小为6,事实上,这与使用无限制没有什么不同。@Jon这与不使用限制不同。如果提供负值作为限制,则不丢弃空的尾随字符串。但是,如果不提供限制,则丢弃空的尾随字符串。与使用单个参数调用的区别在于,它允许空值。在OP的情况下,如果有5';'s、 您应该得到6个元素。
line.split(;”,-1)
实际上返回7个元素:)这并不会强制数组大小为6,事实上它与无限制使用没有什么不同。@Jon这与不使用限制不同。如果提供负值作为限制,则不丢弃空的尾随字符串。但是,如果不提供限制,则丢弃空的尾随字符串。与使用单个参数调用的区别在于,它允许空值。在OP的情况下,如果有5';'s、 你应该得到6个元素。
line.split(;”,-1)
实际上返回7个元素:)
Scanner
s更容易使用,如果他想以不同的方式处理每个元素(例如我的答案),它可以扩展。我不会投反对票,因为这是可行的,但我不认为这是最好的方法。@Jon我认为,
Scanner
不“更容易使用”<代码>字符串[]myArray=StringUtils.splitPreserveAllTokens(“名称;电话;;;”,“;”)非常简单。如果输入总是包含固定数量的分隔符,这是最优雅的解决方案。如果不是,我同意另一种解决方案可能更合适。
Scanner
s更易于使用,如果他想以不同方式处理每一个问题(例如,我的答案),则可以进行扩展。我不会投反对票,因为这是可行的,但我不认为这是最好的方法。@Jon我认为,
Scanner
不“更容易使用”<代码>字符串[]myArray=StringUtils.splitPreserveAllTokens(“名称;电话;;;”,“;”)非常简单。如果输入总是包含固定数量的分隔符,这是最优雅的解决方案。如果不是,我同意另一个解决方案可能更合适。这是他的程序的一个大附加,有更简单的方法。我相信一旦他得到了,他会发现lib的更多用途:)。如果你看一下提供的其他选项,我不确定是否有更简单的方法,这是他的程序的一大附加功能,有更简单的方法。我相信一旦他得到了,他会发现lib的更多用途:)。如果你看一下提供的其他选项,我不确定更简单的方法是什么。结果是7个令牌而不是6:)结果是7个令牌而不是6:)