如何使用parseInt将字符串转换为整数?

时间:2019-04-28 00:17:04

标签: java string integer

我有此代码:

public static void main(String[] args) {
        List<Valtozas> lista = new ArrayList<Valtozas>();

        try {
            File fajl = new File("c://data//uzemanyag.txt");
            Scanner szkenner = new Scanner(fajl, "UTF8");

            while (szkenner.hasNext()) {
                String sor = szkenner.nextLine();
                String [] darabok = sor.split(";");
                String szoveg = darabok[0];
                Valtozas valtozas = new Valtozas(Integer.valueOf(darabok[0]), Integer.valueOf(darabok[1]), Integer.valueOf(darabok[2]));
                lista.add(valtozas);
            }
        }
        catch (Exception e) {

        }


        //3.FELADAT
        System.out.println("3.Feladat: Változások száma: "+lista.size());
    }

}

在这里,我想将String转换为int,但是我不能。我尝试了Integer.Valueof(darabok [0]),但是它不起作用。而且什么也没有发生,因此代码已构建,但随后退出。

1 个答案:

答案 0 :(得分:0)

根据您显示给我们的源代码,问题在于输入文件和您尝试读取的程序之间存在格式不匹配。

程序一次读取一行文件,然后使用单个分号(无空格!)作为文件分隔符将其拆分为多个字段。然后,它尝试将每个分割线的前三个字段解析为整数。

要使其正常工作,必须满足以下条件:

  • 每行必须至少包含三个字段。 (否则,您将获得ArrayIndexOutOfBound异常。)
  • 这三个字段必须与以下正则表达式匹配:-?[0-9]+,即一个可选的负号,后跟一个或多个十进制数字。
  • 结果数字必须介于Integer.MIN_VALUEInteger.MAX_VALUE之间。

详细说明:

  • 不允许在行尾使用空白字符。
  • 不允许嵌入小数点标记和分组字符。
  • 不允许使用科学计数法。
  • 不允许数字太大或太小。

请注意,如果不满足上述任何约束,则运行时系统将引发异常。不幸的是,您用以下代码包围了代码:

    try {
        ...
    }
    catch (Exception e) {

    }

通过捕获异常并在处理程序块中不执行任何操作,基本上可以忽略所有异常。您是在对Java说“如果有任何问题,请不要告诉我!”。因此,自然,Java不会告诉您出了什么问题。

永远不要这样做。这被称为异常压缩,这是一个非常糟糕的主意 1

有两种解决方法:

  1. 打印或记录堆栈跟踪;例如

      catch (Exception e) {
          e.printStackTrace();
      }
    
  2. 删除try / catch,并将throws IOException添加到您的main方法的签名中。

(您不能 just 删除try / catch,因为new Scanner(fajl, "UTF8")抛出IOException。这是一个已检查的异常,因此必须在方法签名中进行处理或声明。)

一旦正确处理了异常,您将收到异常消息和stacktrace,告诉您实际出了什么问题。阅读,理解并修复程序。


1-就像点击“讨厌的”红灯一样,表明您的汽车油位低!