【问题标题】:JAVA: Reading nextLine from file excluding all whitespaceJAVA:从文件中读取下一行,不包括所有空格
【发布时间】:2018-05-18 02:56:50
【问题描述】:

我目前对如何在删除所有空格的同时从文本文件中读取感到困惑。我尝试使用分隔符和字符串拆分,但没有成功。问题是:我的任务要求我从一个文本文件中读取几行文本并将其存储在一个数组中。

但是,其中一条线有一个可见的“间隙”或几个空格(由此处的语音标记表示),我认为这会给我带来问题。

这是文本文件的示例:

jy1 10 10 10 10 10

mp1 6 5 6 " " 7 5

ls1 9 7 12 14 15

mp2 10 12 15 15 14

lb1 12 12 12 12 12

这是我的代码:

try {
    FileReader reader= new FileReader(attendancesFile.txt);
    String line="";
    Scanner in=new Scanner(reader);

// reading from file line by line
    while (in.hasNextLine())    {
        line=in.nextLine();
        // splitting line read in separate words
        String tokens[]=line.split(" ");

        // creates an array of attendances 
        // using 5 separate attendances represented as integer values from file
        String id= tokens [0];
        int attend1= Integer.parseInt(tokens [1]);
        int attend2= Integer.parseInt(tokens [2]);
        int attend3= Integer.parseInt(tokens [3]);
        int attend4= Integer.parseInt(tokens [4]);
        int attend5= Integer.parseInt(tokens [5]);
        int [] attend= {attend1, attend2, attend3, attend4, attend5};

        // uses FP method to find Fitness Class with given ID
        // sets the attendance for Fitness Class with given ID
        fp.classByID(id).setAttendance(attend);
    } 
    reader.close();
    in.close();
}   
catch (IOException e)   {
    System.err.println("Reading from file error.");
}

理想情况下,我应该有 5 个数组,每个数组存储文件每一行的 5 个整数。然后,我会将这些数组传递给另一个类,其中一个方法将这个 int 数组添加到对象数组中。

但是,它给了我一个错误: 线程“main”java.lang.NumberFormatException 中的异常:对于输入字符串:“” 我认为这是由于读取并添加到的空白数组。我已经测试打印出每个数组,看起来好像第四个数组只有 4 个元素和一个空格。

【问题讨论】:

  • 请注意,现在读取和写入文件是通过使用称为 NIO 的 Java 新 I/O API 完成的。它围绕FilesPathsPath 类展开。
  • “但是其中一行有一个可见的‘间隙’或几个空格”应该如何解释这个间隙?我假设您指的是mp1 6 5 6 " " 7 5,但是那个间隙包含",这些引号也是真实文件/输入的一部分吗?我们应该假设这个" " 代表某种元素“空格”元素,这些元素被空格包围,应该包含在结果数组中,或者这些空格应该被视为一个分隔符?
  • 可能重复(取决于 OP 说明)Splitting a string with multiple spaces

标签: java arrays whitespace filereader readline


【解决方案1】:
String tokens[]=line.split(" ");

这仅在一个空白处分隔。 改成

String tokens[]=line.split("\\s+");

这是任意数量的空格

This 是不同正则表达式模式组合的有用指南。

\\s - 匹配单个空白字符

\\s+ - 匹配一个或多个空白字符的序列。

【讨论】:

  • 您能否进一步提供一个资源链接,以更详细地解释正则表达式?除此之外,您还可以在答案中解释\\s+
  • @Zabuza 希望这就足够了
  • 是的,现在好多了,太棒了。
猜你喜欢
  • 2023-01-01
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 2012-05-17
  • 1970-01-01
  • 2022-01-09
相关资源
最近更新 更多