[英]How do I read 2 particular columns in Java from a txt file?
如何从.txt
文件中读取第2列(第1列和第3列)。这些列由不同的定界符分隔(我想忽略写入(基数为16的)第2列)。 另外,我如何跳过列标题。 .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.
Integrated Technology (Malaysia) Sdn. Bhd.
在第二行。
有人可以建议编辑吗?
在这种情况下,我应该使用什么正则表达式?
提前致谢!
您可以在拆分方法中使用“ \\ s +”代替“”,以空格分隔字符串
我很确定您会在这里找到想要的东西: https : //docs.oracle.com/javase/8/docs/api/index.html?java/util/StringTokenizer.html
它们的关键是在至少2个空格 \\s{2,}
进行拆分,使用拆分限制4,并使用布尔值来知道您是否已通过标头,或者忽略了细节行:
boolean passedHeader = false;
boolean skipDetail = false;
String line;
BufferedReader reader = new BufferedReader(new FileReader(path));
while ((line = reader.readLine()) != null) {
line = line.trim();
if (!passedHeader) { // skip header
if (line.isEmpty()) {
passedHeader = true;
}
continue;
}
if (skipDetail) { // skip detail
if (line.isEmpty()) {
skipDetail = false;
}
continue;
}
if (line.isEmpty()) { // skip empty lines
continue;
}
String[] parts = line.split("\\s{2,}", 4);
if (parts.length >= 3) {
String key = parts[0];
String value = parts[2];
System.out.println("Key: \"" + key + "\" Value: \"" + value + "\"");
} else {
System.out.println("Encountered the following line of unexpected format:");
System.out.println(line);
}
skipDetail = true;
}
注意事项 :
我重新格式化了控制台输出,添加了双引号以清楚地显示所有内容。
我为行的格式意外时添加了else,这是因为任何行碰巧都是像D0-AB-DB (hex)
( D0-AB-DB
和(hex)
之间只有一个空格)
拆分限制为3,输入行为4列或更多时,将发生以下情况。 所有额外的列都包含在第三列的文本中。 即与以下内容:
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"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.