如何修改此代码以处理包含字符和整数的输入文本?

时间:2019-04-04 01:52:21

标签: java arraylist parseint

我正在尝试获取一个包含字符以及整数的.txt输入文件,并且仅读取整数,以便执行计算。当我的输入.txt文件仅包含由空格和逗号分隔的整数时,此代码有效,但在添加字符时失败。

示例文件:

Student A: 90, 85, 70, 95
Student B: 65, 75, 90, 90
Student C: 80, 80, 75, 85
Student D: 100, 75, 80, 75

public class test {

    public static void ReadScore (String[] args) {
        List<Integer> listIntegers = new ArrayList<>();
        File f = new File("input2.txt"); {
            try (Scanner sc = new Scanner(f)) {
                while (sc.hasNextLine()) {
                    String line = sc.nextLine();
                    String[] tokens = line.split("\\s*,\\s*");
                    for (String token : tokens) {
                        listIntegers.add(Integer.parseInt(token));
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            finally {System.out.println(listIntegers); }
        }}

    public static void main (String[] args) {
        test.ReadScore(args);
    }
}

当示例.txt文件仅包含整数时,我将收到类似以下结果:

[90, 85, 70, 95, 65, 75, 90, 90, 80, 80, 75, 85, 100, 75, 80, 75]

但是,当引入“ Student A:”等时,我不确定如何处理,并且会收到类似以下的IOExceptions:

java.lang.NumberFormatException: For input string: "Jeff: 10"
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.base/java.lang.Integer.parseInt(Integer.java:652)
    at java.base/java.lang.Integer.parseInt(Integer.java:770)
    at test.ReadScore(test.java:17)
    at test.main(test.java:27)
[]

3 个答案:

答案 0 :(得分:0)

最干净的方法是将输入文件转换为完整的CSV。学生A,M1,M2 ..

如果无法执行此操作,则必须从输入行中删除学生姓名,然后使用定界符逗号分割字符串。

伪代码如下所示 line = line.substring(line.indexOf(':')+ 1);

希望这会有所帮助。

答案 1 :(得分:0)

由于尝试从String解析Integer,所以得到java.lang.NumberFormatException。 要仅获取数字作为输出,您需要除去数字以外的所有其他字符串。试试这个:

String[] tokens = line.replaceAll("[^0-9,.]", "").split("\\s*,\\s*");

希望这会有所帮助。

答案 2 :(得分:0)

非常清楚,您无法转换

  

杰夫:10

转换成整数。...

您可以使用正则表达式并仅捕获数字部分。...

public static void main(String[] args)  {
    String n = "Student A: 90, 85, 70, 95";

    Pattern p = Pattern.compile("\\d+");
    Matcher m = p.matcher(n);
    while(m.find()){
        System.out.println(m.group());
    }
}

此代码将打印

  

90 85 70 95

类似:

    String n = "Student A: 90, 85, 70, 95";
    List<Integer> l = new ArrayList<>();
    Pattern p = Pattern.compile("\\d+");
    Matcher m = p.matcher(n);
    while(m.find()){
        //System.out.println(m.group());
        l.add(Integer.parseInt(m.group()));
    }
    System.out.println("L:" + l);