我正在尝试获取一个包含字符以及整数的.txt输入文件,并且仅读取整数,以便执行计算。当我的输入.txt文件仅包含由空格和逗号分隔的整数时,此代码有效,但在添加字符时失败。
示例文件:
Student A: 90, 85, 70, 95
Student B: 65, 75, 90, 90
Student C: 80, 80, 75, 85
Student D: 100, 75, 80, 75
public class test {
public static void ReadScore (String[] args) {
List<Integer> listIntegers = new ArrayList<>();
File f = new File("input2.txt"); {
try (Scanner sc = new Scanner(f)) {
while (sc.hasNextLine()) {
String line = sc.nextLine();
String[] tokens = line.split("\\s*,\\s*");
for (String token : tokens) {
listIntegers.add(Integer.parseInt(token));
}
}
} catch (Exception e) {
e.printStackTrace();
}
finally {System.out.println(listIntegers); }
}}
public static void main (String[] args) {
test.ReadScore(args);
}
}
当示例.txt文件仅包含整数时,我将收到类似以下结果:
[90, 85, 70, 95, 65, 75, 90, 90, 80, 80, 75, 85, 100, 75, 80, 75]
但是,当引入“ Student A:”等时,我不确定如何处理,并且会收到类似以下的IOExceptions:
java.lang.NumberFormatException: For input string: "Jeff: 10"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.base/java.lang.Integer.parseInt(Integer.java:652)
at java.base/java.lang.Integer.parseInt(Integer.java:770)
at test.ReadScore(test.java:17)
at test.main(test.java:27)
[]
答案 0 :(得分:0)
最干净的方法是将输入文件转换为完整的CSV。学生A,M1,M2 ..
如果无法执行此操作,则必须从输入行中删除学生姓名,然后使用定界符逗号分割字符串。
伪代码如下所示 line = line.substring(line.indexOf(':')+ 1);
希望这会有所帮助。
答案 1 :(得分:0)
由于尝试从String解析Integer,所以得到java.lang.NumberFormatException
。
要仅获取数字作为输出,您需要除去数字以外的所有其他字符串。试试这个:
String[] tokens = line.replaceAll("[^0-9,.]", "").split("\\s*,\\s*");
希望这会有所帮助。
答案 2 :(得分:0)
非常清楚,您无法转换
杰夫:10
转换成整数。...
您可以使用正则表达式并仅捕获数字部分。...
public static void main(String[] args) {
String n = "Student A: 90, 85, 70, 95";
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(n);
while(m.find()){
System.out.println(m.group());
}
}
此代码将打印
90 85 70 95
类似:
String n = "Student A: 90, 85, 70, 95";
List<Integer> l = new ArrayList<>();
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(n);
while(m.find()){
//System.out.println(m.group());
l.add(Integer.parseInt(m.group()));
}
System.out.println("L:" + l);