【问题标题】:Integer.parseInt() throws NumberFormatException with UTF-8 filesInteger.parseInt() 抛出带有 UTF-8 文件的 NumberFormatException
【发布时间】:2012-11-25 09:11:46
【问题描述】:

我需要从文件内容中解析整数。

为了测试我的算法,当我从一个声明的字符串中给出一个文件的内容时

String test = "15 kuruş";

Integer.parseInt 工作正常。但是当我从 UTF-8 文件中读取 Scanner 类时,它不起作用并给出异常

java.lang.NumberFormatException:对于输入字符串:“15”

注意:我将字符串拆分为“15”和“kuruş”,因此 parseInt 方法只接受“15”作为参数。

示例代码:

    satir = satir.trim();//15 kuruş
    StringTokenizer tokenizer = new StringTokenizer(satir," ");
    System.out.println(tokenizer.countTokens());//2
    String s = tokenizer.nextToken();
    int deger = Integer.parseInt(s);//where the exception was throwed

【问题讨论】:

  • 请展示一个简短但完整的程序来演示该问题。另外,检查 '1' 和 '5' 是“正常”的 ASCII 字符,还是一些宽泛的变体。
  • 如果你用空格分割,BOM可能在15之前
  • 好的,我已经编辑过了。我猜这不是普通的 ASCII 字符。正如我在问题中指出的那样,当我给出一个测试字符串时它工作正常但是当我从文件中读取相同的字符串时它会抛出异常。
  • 在十六进制编辑器中打开文件进行检查
  • @NikolayKuznetsov BOM = "字节顺序标记" 可以出现在 Unicode 编码文件中以表示使用了哪种编码。有时会导致问题,因此经常被省略。

标签: java integer java.util.scanner


【解决方案1】:

您的 UTF-8 文件可能以 BOM 开头,您必须以正确的编码读取文件或手动删除它。

因此,当您的 15 不再以 BOM 开头时,Integer.parseInt() 将起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 2017-03-11
    • 2015-07-16
    • 2017-09-05
    • 1970-01-01
    • 2017-01-26
    相关资源
    最近更新 更多