【问题标题】:How do I convert a BufferedReader-Input (String) to Integer and save it in an Integer List in java?如何将 BufferedReader-Input (String) 转换为 Integer 并将其保存在 Java 中的 Integer List 中?
【发布时间】:2021-12-27 01:23:57
【问题描述】:

我想在 BufferedReader 给出的字符串中搜索整数。整数必须保存在整数列表中并返回。 我的想法是将字符串拆分为字符串 [] 并将整数与 Integer.parseInt 直接保存在数组列表中,但不幸的是我只得到 NumberFormatExceptions,尽管字符串 [] 已填充。 有人能给我一些建议吗?

    public List<Integer> getIntList(BufferedReader br) {
        List <Integer> List = new ArrayList<>();
        try{
            while(br.ready()){
                try{
                    String line = (br.readLine());
                    String [] arr = line.split("\\s");
                    for (String s : arr) {
                        System.out.println(s);
                    }
                    if(line.equals("end")){
                        return List;
                    }
                    for (String s : arr) {
                        List.add(Integer.parseInt(s));

                    }
                }
                catch(IOException e){
                    System.err.println("IOException");
                }
                catch(NumberFormatException e){
                    System.out.println("Number");
                }
            }
            return List;
        }
        catch(IOException e){
            System.err.println("IOException");
        }
    return null;
    }

【问题讨论】:

  • while (br.ready()) 不是检查数据结尾的正确方法。 ready() 只会告诉你是否可以不阻塞地读取数据。检查数据是否结束的唯一正确方法是检查br.readline()是否返回null。

标签: java string list integer bufferedreader


【解决方案1】:

您在错误的位置捕获 NumberFormatException,因此您无法继续进行号码搜索循环。您必须将此行 List.add(Integer.parseInt(s)); 包装到 try catch 块中。也不要以大写字母开头的变量名。

【讨论】:

    【解决方案2】:

    您可以使用以下逻辑来检查数字字符串值。

    for(String s : arr){
      if(s.chars().allMatch(Character::isDigit))
        List.add(Integer.parseInt(s));
    }
    

    这样,你就不用关心处理数字格式异常了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-03
      • 2010-09-06
      • 2022-09-30
      • 2023-03-26
      • 1970-01-01
      相关资源
      最近更新 更多