程序需要从文件中解释管道分隔的行并将其存储在两个不同的ArrayLists中。我已经尝试了StackOverflow上的几乎所有相关链接,并且知道了|是一项特殊的操作,因此保留。所以我找到了其他几种读取线条的方法,但没有一种方法可以正常工作。
以下是我的情景:
文本文件如下所示:
0 | 0.20
1个| 0.10
2 | 0.20
依旧......
第一个Integer需要转到ArrayList a1,而第二个浮点数需要在管道定界符之后转到ArrayList a2
我尝试使用扫描仪,然后使用拆分拆分线条。将它们保存到String然后进行String转换。我使用了以下方法:
方法1:
public static void readingFunc(String dirPath) throws NumberFormatException, IOException{
Path p = Paths.get(dirPath, "File.dat");
for (String line: Files.readAllLines(p,StandardCharsets.US_ASCII)){
for (String part : line.split("\\|")) {
Integer i = Integer.valueOf(part);
intArrayList1.add(i);
}
}
方法2:
try(BufferedReader in = new BufferedReader(new FileReader(dirPath+"/File.dat"))){
String line;
while((line = in.readLine())!=null){
String[] pair = line.split("\\|",-1);
//a1.add(Integer.parseInt(pair[0]));
//a2.add(Integer.parseInt(pair[1]))
方法3:
try(BufferedReader in = new BufferedReader(new FileReader(dirPath+"/File.dat"))){
String line;
while((line = in.readLine())!=null){
String[] pair = line.split("\\|",-1);
我还使用了其他几种方法,例如扫描仪,但无法获得结果。我有几个类似于上面的文件,我需要读取它们以将其保存在ArrayList中进行处理。
PS:其中一个文件有三个数据,如:
1 | 0.21 | 0.37
2 | 0.08 | 0.12
等等。我猜。这很容易,类似于两个分隔符过程。 PS:我在Linux Eclipse IDE上开发,所以路径是:
/home/user/workspace1/Java_Code
我从main函数发送路径为dirPath,然后在函数中调用它。请建议我如何使用它?
我已经检查了以下链接:
Java Null value causing issue when reading a pipe delimited file
Read a file and split lines in Java.
Java - Scanner : reading line of record separated by Pipe | as delimiter
Java - putting comma separated integers from a text file into an array
答案 0 :(得分:1)
您可以将正则表达式[|\n]
指定为Scanner
的分隔符,例如:
Scanner scanner = new Scanner("0|0.20\n1|0.10\n2|0.20\n");
scanner.useDelimiter(Pattern.compile("[|\n]"));
System.out.println(scanner.nextInt());
System.out.println(scanner.nextDouble());
System.out.println(scanner.nextInt());
System.out.println(scanner.nextDouble());
要将值读入列表:
Scanner scanner = new Scanner("0|0.20\n1|0.10\n2|0.20\n");
scanner.useDelimiter(Pattern.compile("[|\n]"));
List<Integer> intList = new ArrayList<>();
List<Double> doubleList = new ArrayList<>();
while (scanner.hasNext()) {
intList.add(scanner.nextInt());
doubleList.add(scanner.nextDouble());
}
System.out.println(intList);
System.out.println(doubleList);
如果输入文件是DOS格式的,
然后分隔符模式需要更复杂一点,
因为行结尾是\r\n
。
此模式将支持DOS和UNIX行结尾:
scanner.useDelimiter(Pattern.compile("[|\n]|(\r\n)"));