我有一个文本文件,其中的字段由|分隔。操作员。 txt文件的第一行包含“名称”列。我能够基于|解析和拆分字段操作员使用Scanner,但我需要每个字段值的标题列名称
请在下面找到我需要解析的示例文本文件内容: 名字||姓氏||年龄||薪水
Kong || King || 20 || $ 1000
史蒂夫||罗杰斯|| || $ 2000
马克||里奇|| 30 || $ 12000
Spencer || Cook || 31 || $ 700
我现在得到的结果:
名字
姓氏
年龄
工资
孔
国王
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();
}
我需要的结果如下:
名字-> Kong
姓氏->国王
年龄-> 20
工资-> $ 1000
名字->史蒂夫
姓氏->罗杰斯
年龄->
工资-> $ 2000
感谢您的帮助。
答案 0 :(得分:-1)
不知道这是否是最有效的解决方案,但可以像这样管理它,希望对您有所帮助! :)文件路径不同,因为我在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