Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中跳过空白值的拆分行和填充数组_Java_Arrays - Fatal编程技术网

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;}中提取代码行,公共分隔符是空格。我考虑使用带有列标题的子字符串作为起始值、结束值