如何从txt文件中读取Java中的2个特定列?

如何从txt文件中读取Java中的2个特定列?,java,delimiter,file-handling,Java,Delimiter,File Handling,如何从.txt文件中读取2个特定列第一列和第三列。这些列由不同的分隔符分隔。我想忽略第二列,其中写入了基数16。还有,如何跳过列标题。.txt文件如下所示: IOU/AB-L Organization company_id Organ

如何从.txt文件中读取2个特定列第一列和第三列。这些列由不同的分隔符分隔。我想忽略第二列,其中写入了基数16。还有,如何跳过列标题。.txt文件如下所示:

IOU/AB-L                                                    Organization                                 
company_id                                                  Organization                                 
                                                            Address                                      

D0-AB-DB   (hex)             Ahenhen ViewAt Technology Co.,Ltd. 
D0ABDB     (base 16)         Ahenhen ViewAt Technology Co.,Ltd. 
                             9A,Microprofit,6th Gaoxin South Road, High-Tech 
                             Industrial Park, Nanshan, henzhen.
                             henzhen  guangdong  51867
                             DN

42-05-F5   (hex)            Integrated Technology (Malaysia) Sdn. Bhd.
4205F5     (base 16)        Integrated Technology (Malaysia) Sdn. Bhd.
                            Phase 1, Bayan Aepas FIZ
                            Bayan Lepas  Penang  11923
                            NY
我正在尝试的代码是:

String line;
BufferedReader reader = new BufferedReader(new FileReader(path));
while ((line = reader.readLine()) != null)
{
    String[] parts = line.split("   ", 3);
    if (parts.length >= 3)
    {
        String key = parts[0];
        String value = parts[2];
        System.out.println("Key value pair is "+key+"   "+value);
    } 
}
所以基本上我想在第一行读D0-AB-DB和Ahenhen ViewAt Technology Co.,Ltd.,然后在第二行读42-05-F5和Integrated Technology Malaysia Sdn.Bhd

有人能推荐一些编辑吗? 在这种情况下,我应该使用什么正则表达式


提前谢谢

您可以使用\s+而不是在分割方法中使用空格来分割字符串

我很确定你会在这里找到你想要的:

他们的关键是在至少2个空格上拆分\s{2,},使用拆分限制4,并使用布尔值来确定是否已通过标题,或是否忽略了详细信息行:

布尔passedHeader=false; 布尔skipDetail=false; 弦线; BufferedReader reader=新建BufferedReadernew FileReaderpath; 而line=reader.readLine!=空的{ line=line.trim; if!passedHeader{//skip header 如果行是空的{ passedHeader=true; } 持续 } 如果跳过详细信息{//跳过详细信息 如果行是空的{ skipDetail=false; } 持续 } 如果line.isEmpty{//跳过空行 持续 } String[]parts=line.split\\s{2,},4; 如果parts.length>=3{ 字符串键=部件[0]; 字符串值=零件[2]; System.out.printlkey:\+key+\Value:\+Value+\; }否则{ System.out.PrintLn遇到以下意外格式行:; System.out.printlnline; } skipDetail=true; } 注:

我重新格式化了控制台输出,添加了双引号以清楚地显示所有内容

我添加了一个else,用于当行的格式出乎意料时,任何一行都会发生类似于D0-AB-DB hex的情况,D0-AB-DB和hex之间只有一个空格

下面是拆分限制为3,输入行为4列或更多列时会发生的情况。所有额外的列都包含在第三列的文本中。i、 e.具有以下特点:

D0-AB-DB   (hex)             Ahenhen ViewAt Technology Co.,Ltd.       Column 4 text
你会得到:

Key: "D0-AB-DB"   Value: "Ahenhen ViewAt Technology Co.,Ltd.       Column 4 text"