如何修改此代码以处理包含字符和整数的输入文本?
Posted
技术标签:
【中文标题】如何修改此代码以处理包含字符和整数的输入文本?【英文标题】:How can I modify this code to handle an input text with characters as well as integers? 【发布时间】:2019-08-25 15:58:36 【问题描述】:我正在尝试获取一个包含字符和整数的输入 .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]
但是,当“学生 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)
[]
【问题讨论】:
【参考方案1】:最简洁的方法是将输入文件转换为完整的 CSV。学生A,M1,M2..
如果您不能这样做,则必须从输入行中删除学生姓名,然后使用分隔符逗号拆分字符串。
伪代码如下所示 line = line.substring(line.indexOf(':') + 1);
希望这会有所帮助。
【讨论】:
【参考方案2】:你得到java.lang.NumberFormatException
因为你试图从字符串中解析整数。
要仅获取数字作为输出,您需要删除除数字之外的所有额外字符串。试试这个:
String[] tokens = line.replaceAll("[^0-9,.]", "").split("\\s*,\\s*");
希望这会有所帮助。
【讨论】:
【参考方案3】:异常很清楚,不能转换
杰夫: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);
【讨论】:
以上是关于如何修改此代码以处理包含字符和整数的输入文本?的主要内容,如果未能解决你的问题,请参考以下文章
Bailian3729 用set实现字符串的排序和查找文本处理