【问题标题】:Java splitting inputJava拆分输入
【发布时间】:2012-05-12 13:08:23
【问题描述】:

我正在尝试为我的项目编写一个简单的代码 如果用户键入

步行 10 分钟

我需要在我的 walk(distance) 方法中使用“walk”命令,因为距离 = 10 我有类似的东西

while (!quit) {
Scanner in = new Scanner(System.in);
String input = in.nextLine();
// if (walk x is typed) {
walk(x);
}
}

我正在使用 java.util.scanner 另一个问题是我的方法 walk(int x) 使用 int 所以我需要将 String 输入转换为 int

我在网上搜索了一段时间,但找不到我要找的东西(或者我不明白)

如果您能帮助我,我将不胜感激,谢谢

非常感谢大家的解答,我最初的问题已解决 但现在我有另一个问题 当我只输入“walk”时,它会得到数组越界异常 当然,因为它试图将 null 转换为 int(不可能) 我试过这个并在网上检查过

                    try {
                    Integer.parseInt(splitStrings[1]);
                    }
                    catch(NumberFormatException e) {
                    System.out.println("error: " + e);
                    }

仍然没有帮助(我不擅长尝试/捕获) 因此,如果用户键入walk without a distance,我需要给出错误消息 再次感谢

好的,我也知道了 只是用了一个简单的东西

            if ("walk".equals(splitStrings[0])) {
                if (splitStrings.length == 2) {
                int distance = Integer.parseInt(splitStrings[1]);
                Robot.walk(distance);
                }
                if (splitStrings.length != 2) {
                    System.out.println("Entry must be like walk 10");
                }
            }

【问题讨论】:

  • 它们之间有空格吗?
  • 是的,用户类型 walk 10 或 walk 25
  • 使用 split 获取输入行中的所有标记后,您可以通过 Integer.parseInt 获取您需要的 int 值

标签: java string input split


【解决方案1】:

尝试对字符串使用 split() 方法。它将返回一个字符串数组。例如

String s = 'walk 10';
String[] splitStrings = s.split(" ")

现在,要访问 10,您可以这样做:

String distanceToWalk = splitStrings[1]

要将其转换为 int,请在 Integer 上使用 parseInt() 方法

Integer.parseInt(distanceToWalk);

  1. http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split%28java.lang.String%29
  2. http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#parseInt%28java.lang.String%29

【讨论】:

  • 非常感谢。这正是我正在寻找的将输入从空格中拆分为 2 并将 10 转换为整数
【解决方案2】:

您可以在空间上进行拆分,在这种情况下,数字将是结果数组的第二个元素(索引 1),例如

编辑 Adam Liss 的以下评论

Integer x = Integer.parseInt(input.split(" ")[1])

【讨论】:

  • +1 是一个简洁的解决方案,但鉴于这是用户输入,您还需要先去除多余的空格(否则您的号码将在数组中的错误位置)。
  • 等等,什么???您不能将字符串转换为整数!为所有支持者感到羞耻。
  • @AdamLiss 你是绝对正确的,相应地修改了答案。
  • @Strawberry +1 用于更新。还要大胆地发布一个甚至不是有效的 Java 答案......并且仍然设法获得 3 个赞成票!
【解决方案3】:

您可以使用Integer.parseInt() 方法:

int distance = Integer.parseInt(input);

【讨论】:

    【解决方案4】:

    试试:

    String s = 1;
    int i = Integer.parseInt(s); // returns 1
    

    【讨论】:

      【解决方案5】:

      假设您从字符串中去掉整数部分,例如留下

      的输入

      "walk 10" 和 "10",使用类似

      // say you've parsed the "number" portion into a variable "inputString"
      int x;
      x= Integer.parseInt(inputString);
      

      【讨论】:

        【解决方案6】:

        你可以用这个:

        // For read the input
        InputStreamReader streamReader = new InputStreamReader(System.in);
        BufferedReader reader = new BufferedReader(streamReader);
        String input = reader.readLine();
        

        如果你更喜欢使用Scanner,那么

        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        

        然后:

        StringTokenizer st = new StringTokenizer(input);
        if (st.countTokens == 2) { // Only for two tokens "walk 100", "return 10"
            String method = st.nextToken();
            if (method.equals("walk") { // if you have more methods like "walk"
                int distance = Integer.parseInt(st.nextToken());
                walk(distance); // walk
            }
        }
        

        如果你想阅读更多行

        for(String input; sc.hasNextLine();) {
            input = sc.nextLine();
        
            // do something
        
        }
        

        或者

        for(String input; (input = reader.readLine()) != null;) {
        
            // do something
        
        }
        

        【讨论】:

        • 我如何在 java.util.scanner 中使用分词器?
        • 我添加了StringTokenizerScanner
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-02
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        相关资源
        最近更新 更多