首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从控制台拆分用户输入?

如何从控制台拆分用户输入?
EN

Stack Overflow用户
提问于 2017-01-05 05:52:41
回答 3查看 264关注 0票数 1

例如,如果输入格式如下(对于结果图表),我如何将一行用户输入拆分为单独的字符串并进行存储。

代码语言:javascript
复制
home_name : away_name : home_score : away_score

我该如何将输入分成4个不同的部分并分别存储呢?(用户将被提示仅以上述格式输入,我正在使用while循环继续询问行结果,直到用户输入stop)。

EN

回答 3

Stack Overflow用户

发布于 2017-01-05 06:04:24

如果您的输入数据的格式是一致的,那么您可以简单地使用像:这样的模式并执行以下操作:

代码语言:javascript
复制
public static void main(String[] args) {
    /* Scan Inputs */
    Scanner in = new Scanner(System.in);

    /* Input String */
    String input = null;

    /* Create StringBuilder Object */
    StringBuilder builder = new StringBuilder();

    String[] headers = { "home_name: ", "away_name: ", "home_score: ",
            "away_score: " };
    while (null != (input = in.nextLine())) {
        /* Break if user enters stop */
        if ("stop".equalsIgnoreCase(input)) {
            break;
        }

        /* Trim the first and the last character from input string */
        input = input.substring(1, input.length() - 1);

        /* Split the input string using the required pattern */
        String tokens[] = input.split(" : ");

        /* Print the tokens array consisting the result */
        for (int x = 0; x < tokens.length; x++) {
            builder.append(headers[x]).append(tokens[x]).append(" | ");
        }
        builder.append("\n");
    }

    /* Print Results & Close Scanner */
    System.out.println(builder.toString());
    in.close();
}

注意,在使用给定的模式拆分输入字符串之前,我在这里使用了substring()函数去掉了输入字符串开头和结尾的<>

输入:

代码语言:javascript
复制
<manchester united : chelsea : 3 : 2>
<foobar : foo : 5 : 3>
stop

输出:

代码语言:javascript
复制
home_name: manchester united | away_name: chelsea | home_score: 3 | away_score: 2 | 
home_name: foobar | away_name: foo | home_score: 5 | away_score: 3 | 
票数 4
EN

Stack Overflow用户

发布于 2017-01-05 06:49:52

在某些情况下,输入可能会有一点“不一致”:没有提供空白或新版本产生的更改。如果是这种情况,则可以使用正则表达式应用一些保护。

代码语言:javascript
复制
public static void main(String[] args) {

    boolean validInput = false; 

    String input = "<home_name : away_name : home_score : away_score>";

    String pattern = "<.*:.*:.*:.*>";
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(input);
    validInput = m.matches();

    if(validInput) {
        input = input.substring(1, input.length() - 1);
        String tokens[] = input.split("\\s*:\\s*");

        for (int x = 0; x < tokens.length; x++) {
            System.out.println(tokens[x]);
        }

    } else {
        System.out.println("Input is invalid");
    }
}
票数 1
EN

Stack Overflow用户

发布于 2017-01-05 06:58:41

如果格式与您所描述的格式完全相同,那么解析它的一个相当有效的方法是:

代码语言:javascript
复制
public static void main(String[] args) {
    String line = "<Raptors : T-Rexes : 5 : 10>";

    final int colonPosition1 = line.indexOf(':');
    final int colonPosition2 = line.indexOf(':', colonPosition1 + 1);
    final int colonPosition3 = line.indexOf(':', colonPosition2 + 1);

    final String homeName = line.substring(1, colonPosition1 - 1);
    final String awayName = line.substring(colonPosition1 + 2, colonPosition2 - 1);
    final int homeScore = Integer.parseInt(line.substring(colonPosition2 + 2, colonPosition3 - 1));
    final int awayScore = Integer.parseInt(line.substring(colonPosition3 + 2, line.length() - 1));

    System.out.printf("%s: %d vs %s: %d\n", homeName, homeScore, awayName, awayScore);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41473861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档