Java中跳过空白值的拆分行和填充数组
我有一个行数组,有点像下面Java中跳过空白值的拆分行和填充数组,java,arrays,Java,Arrays,我有一个行数组,有点像下面 ANUM = 0-0, ACO=0, L=1-20; ANUM = 0-00; ANUM = 0-01, ROUTINF=FDS, L=3-20; ANUM = 0-02, ACO=6, AO=7, L=3-20; ANUM = 0-03, AO=4,L=3-20; ANUM = 1-0, F=PRE, ANT=3, NAPI=1; ANUM = 1-1, F=PRE, ANT=3; 下面是一个例子: A-NUMBER RO
ANUM = 0-0, ACO=0, L=1-20;
ANUM = 0-00;
ANUM = 0-01, ROUTINF=FDS, L=3-20;
ANUM = 0-02, ACO=6, AO=7, L=3-20;
ANUM = 0-03, AO=4,L=3-20;
ANUM = 1-0, F=PRE, ANT=3, NAPI=1;
ANUM = 1-1, F=PRE, ANT=3;
下面是一个例子:
A-NUMBER ROUTINF ACO AO L MISCELL
0-0 0 1-20
0-00
0-01 FDS 3-20
0-02 6 7 3-20
0-03 4 3-20
1-0 F=PRE
ANT=3
NAPI=1
1-1 F=PRE
ANT=3
我需要通过跳过具有空值的列来根据列解析该行,并创建一个新行,如下所示
ANUM = 0-0, ACO=0, L=1-20;
ANUM = 0-00;
ANUM = 0-01, ROUTINF=FDS, L=3-20;
ANUM = 0-02, ACO=6, AO=7, L=3-20;
ANUM = 0-03, AO=4,L=3-20;
ANUM = 1-0, F=PRE, ANT=3, NAPI=1;
ANUM = 1-1, F=PRE, ANT=3;
我可以拆分行,但我的代码不记得该值属于哪一列以及何时跳过这些值
String[] splitted = null;
for (Integer i = 0; i < lines.size(); i++) {
splitted = lines.get(i).split("\\s+");
for(String str : splitted)
if(!(splitted.length == 1)){
anum = splitted[0];
routinf = splitted[1];
aco = splitted[2];
ao = splitted[3];
l = splitted[4];
}else {
miscell = splitted[0];
}
}
文件中的列似乎是固定长度的,我看不到任何其他方法来区分每一列。如果是这样的话,我建议使用substringsrat,end而不是split 创建一个类来保存一条记录
class Record {
String aNumber,
List<String> routingf, aco, ao, l, miscell;
public Record(String aNumber) {
this.aNumber = aNumber;
this.routingf = new ArrayList<>();
// init other lists like above ...
}
public void addRoutingf(String routingf) {
// add only of not null and is not empty trimmed
if(routingf != null && routiingf.trim().length() > 0) {
this.routingf.add(routiingf);
}
}
// implement add-methods for other lists like above ...
}
什么是常用的分隔符?就这样分手吧。。。您当前的+将消耗任意数量的空白\s{1,4}将其限制在1到4个字符之间。为您的数据找到正确的数字。如果您的输入时间在列之间使用一个空格字符作为示例选项卡,那么您的代码几乎可以
String[] splitted = null;
for (Integer i = 0; i < lines.size(); i++) {
splitted = lines.get(i).split("\\s");
if(!(splitted.length == 1)){
anum = splitted[0];
routinf = splitted[1];
aco = splitted[2];
ao = splitted[3];
l = splitted[4];
}else {
miscell = splitted[0];
}
}
//print only not empty fields
请注意,删除不必要的for循环和将拆分字符从\s+更改为\s只是一个想法,但如果它有助于保留结果中的空白以定义它所属的列,您也可以进行实验
lines.get(i).split(yourDelimiter, -1);
如果不知道源文件的确切外观,很难判断这是否有帮助,但您可以尝试一下
e、 g.如果值总是在带有空格的拆分字符串中的某个点上,您可以很容易地分辨出它属于哪个列并提取它们。谢谢,我想我可以从标题中找到列长度并拆分每个字符串。谢谢你的提示。因为我是个业余爱好者,你能告诉我如何给唱片添加字符串吗?@user3131745也谢谢你,先生:D。如果这个答案对你有帮助,那么你可能想把它标记为被接受,并且可能还要投票表决;-。PS:当您要为所有方法实现NOTNULL和not empty检查时,最好在自己的方法布尔ISNOTNULOREMTYTRIMEDSTRINGS{return s!=null&&s.trim.length>0;}中提取代码行,公共分隔符是空格。我考虑使用带有列标题的子字符串作为起始值、结束值