【问题标题】:Java - How to read integers separated by a space into an arrayJava - 如何将用空格分隔的整数读入数组
【发布时间】:2012-12-29 07:29:41
【问题描述】:

我的项目有问题,因为我无法正确开始,即从用户那里读取一行由空格分隔的整数并将值放入数组中。

    System.out.println("Enter the elements separated by spaces: ");
    String input = sc.next();
    StringTokenizer strToken = new StringTokenizer(input);
    int count = strToken.countTokens();
    //Reads in the numbers to the array
    System.out.println("Count: " + count);
    int[] arr = new int[count];

    for(int x = 0;x < count;x++){
        arr[x] = Integer.parseInt((String)strToken.nextElement());
    }

这就是我所拥有的,它似乎只读取数组中的第一个元素,因为在初始化 count 时,由于某种原因它被设置为 1。

谁能帮助我?换一种方式会更好吗?

【问题讨论】:

  • 每个人都给出了明显的替代解决方案,但在 OP 的代码中找到错误会更有趣(我没有)。
  • @dystroy:错误是,他使用的是sc.next(); 而不是sc.nextLine();
  • @jlordo 很好看。这应该是(唯一的)答案。
  • @NickHolt:我很确定它引用了java.util.Scanner

标签: java arrays string integer


【解决方案1】:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
.
.
.
StringTokenizer st = new StringTokenizer(br.readLine());
int K = Integer.parseInt(st.nextToken());
int N= Integer.parseInt(st.nextToken());

【讨论】:

    【解决方案2】:

    只需进行微小的更改即可使您的代码正常工作。 错误在这一行:

    String input = sc.next();
    

    正如我在问题下的评论中指出的那样,它只读取下一个输入标记。请参阅documentation

    如果你用

    替换它
    String input = sc.nextLine();
    

    它会做你想做的事,因为nextLine() 会消耗整行输入。

    【讨论】:

    • +1 以获得正确的解释。 OP 的其余代码可能会更好,但大部分都很好。
    • 好的,这听起来真的很无聊,但我将其设置为 next 的原因是因为某种原因,当我输入 sc.nextLine() 时,它只是跳过用户输入并继续执行程序。这真的很奇怪......
    • @SamFrench:复制了你的代码,用nextLine(); 运行它并且运行良好。再试一次,如果问题仍然存在,您可能在其他地方出错了。
    【解决方案3】:

    这将是一种更简单的方法 -

    System.out.println("Enter the elements seperated by spaces: ");
    String input = sc.nextLine();
    String[] split = input.split("\\s+");
    int[] desiredOP = new int[split.length];
    int i=0;
    for (String string : split) {
        desiredOP[i++] = Integer.parseInt(string);
    }
    

    【讨论】:

    • String input = sc.next(); 只会读取下一个token,所以代码会出现和OP一样的问题。
    • @jlordo - 非常感谢您的评论。我已经更新了我的代码。请检查。
    【解决方案4】:

    有其他方法可以达到同样的效果。但是当我尝试您的代码时,它似乎可以正常工作。

    StringTokenizer strToken = new StringTokenizer("a b c");
    int count = strToken.countTokens();
    System.out.println(count);
    

    它打印计数为 3。默认分隔符是“”

    我不知道您是如何获取输入字段的。可能是它没有以字符串格式返回完整的输入。

    我认为您正在使用 java.util.Scanner 来读取您的输入

    来自扫描仪的 java 文档。

    扫描器使用分隔符模式将其输入分解为标记, 默认情况下匹配空格。然后生成的令牌可能是 使用各种 next 转换为不同类型的值 方法。

    因此输入只返回一个整数,其余的无人看管

    阅读本文。 Scanner#next(),你应该改用Scanner#nextLine()

    【讨论】:

      【解决方案5】:
      String integers = "54 65 74";
      List<Integer> list = new ArrayList<Integer>();
      for (String s : integers.split("\\s"))  
      {  
         list.add(Integer.parseInt(s));  
      }
      list.toArray();
      

      【讨论】:

      • @dystroy 我提出了 equals 和最简单的代码。我回复了Would it be better to do this a different way?
      • 是的,但是您的初始代码完全有缺陷(现已修复)。我不知道谁能投票,除了人们只是来检查答案中的某个地方是否存在“分裂”......
      • 事实上它并不能解决 jlordo 看到的真正问题。
      • 好的,我已经这样做了,但问题是由于某种原因扫描仪不会使用 sc.nextLine() 命令等待用户输入,它只是跳到下一个用户输入跨度>
      猜你喜欢
      • 2013-01-16
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      相关资源
      最近更新 更多