【问题标题】:Convert numbers in string format to integer format (Java)将字符串格式的数字转换为整数格式(Java)
【发布时间】:2020-05-06 21:26:05
【问题描述】:

我有一个小问题:

import java.io.*;

public class Ninteri {

    public static void main(String[] args) throws IOException {

        FileReader f = new FileReader("/Users/MyUser/Desktop/reader.txt");

        BufferedReader b = new BufferedReader(f);

        String s;
        int x;

        while (true) {
            s = b.readLine();
            if (s == null) {
                break;
            }

            x = Integer.parseInt(s);
            System.out.println(x);
        }
    }

}

例外:

Exception in thread "main" java.lang.NumberFormatException: For input string: "1 2 3 4 5 6 7 8 "
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:580)
    at java.lang.Integer.parseInt(Integer.java:615)
    at stream.Ninteri.main(Ninteri.java:22)

【问题讨论】:

  • 文件长什么样?数字是用空格还是换行符分隔?
  • 您不能将整个字符串 "1 2 3 4 5 6 7 8" 变成单个 int。您需要将其拆分为空格,然后解析该数组的各个元素
  • 如果 s 是整行,你需要用 String[] snums = s.split("\\s"); 分解它

标签: java integer buffer filereader parseint


【解决方案1】:

从错误中可以看出,文件的第一行是1 2 3 4 5 6 7 8,它本身不是数字字符串;而是一个包含数字字符串的字符串。首先,您需要将这一行拆分为一个数字字符串数组,然后您需要迭代数组并将数组中的每个元素解析为int

while (true) {
    s = b.readLine();
    if (s == null) {
        break;
    }
    String[] arr = s.split("\\s+");// Split the line on space(s)
    for (String num : arr) {
        x = Integer.parseInt(num);
        System.out.println(x);
    }
}

【讨论】:

    【解决方案2】:

    1 2 3 4 5 6 7 8 不是单个数字,因此不能用整数表示。

    在 split 产生的字符串数组上使用 for 块来单独转换它们。

    for(String a: s.split("\\s")) {
        int x = Integer.parseInt(a);
        System.out.println(x);
    }
    

    【讨论】:

      猜你喜欢
      • 2016-01-07
      • 1970-01-01
      • 2017-02-22
      • 2013-09-22
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-07
      相关资源
      最近更新 更多