首页 > 解决方案 > 如何在 Java 中获取部分用户输入?

问题描述

我想制作一个Java程序,它将获取用户输入的一部分并将其存储起来以便以后使用。我的输入看起来像这样:

Mary market 8 theatre 80 end
John books 45 end 

第一个字段表示此人的姓名,然后是一系列费用以及他们提供资金的原因名称。end 这个词表示每个人输入的结束。

我的问题是如何将人们的姓名和费用分开,以便我可以输出每个人的平均费用?

标签: javaarraysstringinputjava.util.scanner

解决方案


这真的取决于,如果您严格同意输入数据将始终具有与示例中相同的格式,那么您可以简单地使用字符串.split(" ")并读取每行的所有数字。

示例

// or any other input, eg: List, BufferedReader, etc
String[] lines = new String[] {
        "Mary market 8 theatre 80 end",
        "John books 45 end"
};
for (String line : lines) {
    String[] raw = line.split(" ");
    String name = raw[0];

    for (int i = 1; i < raw.length; i += 2) {
        if (raw[i].equals("end")) break;
        String expenseName = raw[i];
        int cost = Integer.parseInt(raw[i+1]); 
        ... 
    }
}

但如果不是,那么最好使用RegExp并找到每行中的所有数字。

示例

// or any other input, eg: List, BufferedReader, etc
String[] lines = new String[] {
        "Mary market 8 theatre 80 end",
        "John books 45 end"
};

Pattern p = Pattern.compile("\\d+");
for (String line : lines) {
    Matcher m = p.matcher(line);
    while(m.find()) {
        int cost = Integer.parseInt(m.group());
        ...
    }
}

推荐阅读