我正在遍历java中文件的所有行并提取相关数据。我遇到问题的文件中只有一行。该行如下所示
"D|12345|TEST|This is a test|123|Test Data|"
我需要获取由|分隔的所有单个值。成单独的字符串,忽略“ D” 所以
String a = 1234
String b = TEST
等
文件中有多行,但是我只关心以D开头的行,我将如何处理?我有一些示例代码,但是我对子字符串不好用
public class Main {
public static void main(String[] args) throws IOException {
try {
File f = new File("src/main/resources/data.txt");
List<String> lines = FileUtils.readLines(f, "UTF-8");
for (String line : lines) {
if (line.startsWith("D")) {
// this iis the line i am concerned about
// not sure how to get each value from the line
int ind = line.lastIndexOf("|") + 1;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:2)
您可以使用方法String[]
从String
直接获得split(...)
,请参见以下示例:
public static void main(String[] args) throws ParseException {
String line = "D|12345|TEST|This is a test|123|Test Data|";
String[] splitLine = line.split("\\|");
for (String word : splitLine) {
System.out.println(word);
}
}
如果您想忽略第一列("D"
),请采用经典的for
循环并从索引1开始:
public static void main(String[] args) throws ParseException {
String line = "D|12345|TEST|This is a test|123|Test Data|";
String[] splitLine = line.split("\\|");
for (int i = 1; i < splitLine.length; i++) {
System.out.println(splitLine[i]);
}
}
您基本上可以遍历文件的各行(就像您已经做过的那样),并且仅将行添加到List<String>
(如果它为startsWith("D")
,而忽略所有其他行)。然后,使用该List<String>
,对其进行循环或流式处理,并按示例所示拆分每行。最好的方法是保存值以存储它们的类/ POJO。
答案 1 :(得分:1)
您要执行的操作是将行“拆分”为多个字符串:
line.split("\\|");
它将返回一个包含所有子字符串的数组:
String[] words = line.split("\\|");
因此,当您要忽略第一个“ D”时,可以忽略数组中的第一个条目(words[0]
<-“ D”)
D|12345|TEST|This is a test|123|Test Data|
String[] words = line.split("\\|");
words:
["D", "12345", "TEST", "This is a test", "123", "Test Data"];
编辑
正如deHaar所指出的,我忘记了特殊字符|
,该字符将 line 分割为单个字符。因此,在您的情况下,您必须在转义符前面加上反斜杠来“转义” |
。 (但是,由于反斜杠也为控制字符,因此您也必须对其进行转义),因此“ \\ |”
对于大多数其他(“正常”)字符,例如空白" "
或"a"
,则不需要这样做。
EDIT2
由于我在回答中犯了很多错误,所以让我向您展示一种消除的方法:
String words = line.substring(1).split("\\|");
附加的substring(1)
将从第二个字符(索引为1
的字符)开始返回“子字符串”-因此,所有在“ D”之后的字符都将返回。
答案 2 :(得分:1)
line.split("\\|");
将为您提供字符串数组。然后忽略位置0处的元素。
答案 3 :(得分:0)
您可以使用
String[] splittedStr=line.split("\\|");
然后您可以遍历数组的每个项目。
答案 4 :(得分:0)
您必须分割字符串;然后迭代每个值,省略第一个元素。
对于循环版本:
String[] values = line.split("\\|");
for (int i = 1; i < values.length; i++) {
System.out.println(values[i]);
}
流版本:
String[] values = line.split("\\|");
Stream.of(values)
.skip(1)
.forEach(System.out::println);