我有一个文本文件,其中的字段由|分隔运营商。 txt文件中的第一行包含列名称。我能够基于|解析和拆分字段运算符使用Scanner,但我需要每个字段值的标题列名称
请找到我需要解析的示例文本文件内容:FirstName || lastName || Age || Salary
香港||王|| 20 || $ 1000个
史蒂夫罗杰斯|| || || $ 2000年
马克||更丰富|| 30 || $ 12000
斯宾塞||库克|| 31 || $ 700
我现在得到的结果:
名字
姓
年龄
薪水
Kong
王
20
$1000
史蒂夫
罗杰斯
$2000
标记
更丰富
30
$12000
斯宾塞
厨师
31
$700
我使用的示例代码:
FileInputStream inputStream = new FileInputStream("c:\\sample\\sample.txt");
Scanner scanner = new Scanner(inputStream, "UTF-8");
scanner.useDelimiter("[\\||]");
while(scanner.hasNext()){
System.out.println(scanner.next().trim());
}
scanner.close();
}
我需要的结果如下:
FirstName - > Kong
lastName - >国王
年龄 - > 20岁
薪水 - > 1000美元
FirstName - >史蒂夫
姓氏 - >罗杰斯
年龄 - >
薪水 - > 2000美元
任何帮助表示赞赏..
不知道它是否是最有效的解决方案,但是像这样管理它,希望它有所帮助! :)文件路径不同,因为我在Linux中。
FileInputStream inputStream = new FileInputStream("/home/dzandes/Music/test.txt");
Scanner scanner = new Scanner(inputStream, "UTF-8");
scanner.useDelimiter("[\\||]");
List<String> contents = new ArrayList<>();
while (scanner.hasNext()) {
String s = scanner.next().trim();
// First, we split the Strings with new line in between
if (!s.isEmpty()) {
if (s.contains("\n")) {
String[] s_ = s.split("\n");
for (String str : s_) {
contents.add(str);
}
} else {
contents.add(s);
}
} else {
contents.add(s);
}
}
scanner.close();
// Then we keep the necessary empty Strings we need, e.g. Steve Roger's age, and skip the rest
List<String> contents_ = new ArrayList<>();
for (int j = 0; j < contents.size(); j++) {
if (!contents.get(j).isEmpty()) {
contents_.add(contents.get(j));
} else {
if (contents.get(j+1).isEmpty()
&& contents.get(j-1).isEmpty()) {
contents_.add(contents.get(j));
}
}
}
/**
* Just left this for-loop to see what the list contains after the above
*
* Of course, you can comment it
*/
for (String s : contents_) {
System.out.println("s :" + s);
}
int i = 1;
while (i*4 < contents_.size()) {
System.out.println(contents_.get(0) + " - " + contents_.get(i*4));
System.out.println(contents_.get(1) + " - " + contents_.get((i*4) + 1));
System.out.println(contents_.get(2) + " - " + contents_.get((i*4) + 2));
System.out.println(contents_.get(3) + " - " + contents_.get((i*4) + 3));
i++;
}
它打印,
FirstName - Kong
lastName - King
Age - 20
Salary - $1000
FirstName - Steve
lastName - Rogers
Age -
Salary - $2000
FirstName - Mark
lastName - Richer
Age - 30
Salary - $12000
FirstName - Spencer
lastName - Cook
Age - 31
Salary - $700