这是我的文本文件:
1,2,3
4,5,6,7
这是我的代码段:
import java.io.*;
import java.util.*;
public class Findcycle {
private final static String DELIMITER = ",";
private final static String filePath = "D:\\1.txt";
public static void main(String[] args) {
File inputFile = new File(filePath);
ArrayList<Integer> numbers = new ArrayList<Integer>();
try
{
Scanner scanner = new Scanner(inputFile);
scanner.useDelimiter(DELIMITER);
while(scanner.hasNext())
{
String value = scanner.next();
Integer num = Integer.parseInt(value);
numbers.add(num);
}
System.out.println(numbers);
scanner.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
}
我收到以下异常:
线程“main”中的异常java.lang.NumberFormatException:用于输入 字符串:“3 4”at java.lang.NumberFormatException.forInputString(Unknown Source)
在java.lang.Integer.parseInt(未知来源)
在java.lang.Integer.parseInt(未知来源) 在Findcycle.main(Findcycle.java:18)
我该怎么办?
答案 0 :(得分:1)
您的文件混合了逗号cout
和新行,
分隔符。
您应该将扫描仪配置为使用两个分隔符。
替换此
\n
与
scanner.useDelimiter(DELIMITER);
答案 1 :(得分:0)
你的字符串格式不如前所述。 我认为空格实际上是代码中的新行。
因此,我将您的扫描仪更改为BufferedReader并从那里使用Streams:
private final static String filePath = "D:\\1.txt";
public static void main(String[] args) {
File inputFile = new File(filePath);
ArrayList<Integer> numbers = new ArrayList<>();
try
{
BufferedReader rd = new BufferedReader(new FileReader(inputFile));
Pattern pattern = Pattern.compile("[,\\s]+");
rd.lines().forEach(x-> Arrays.asList(pattern.split(x)).forEach(y->numbers.add(Integer.parseInt(y))));
rd.close();
System.out.println(numbers);
} catch (IOException e) {
e.printStackTrace();
}
}
这条线非常整齐,不是吗?
PS:我之前添加了答案,所以如果你的空格是一个空格,它仍然会正确编译数字