Java扫描器数组

5

我遇到了java相关的问题。我需要扫描数字(例如:1 3 4 2 5 6 7)并将它们放入数组中。问题在于我不知道它有多长。是否有一种指令可以用来确定放在扫描器中的数字长度?


我曾经使用过的大多数扫描设备都像键盘一样,只是“输入”你扫描的内容。因此,你可以抓取所有的输入,然后解析它。 - Bobson
4个回答

3

如果您不想使用ArrayList,那么可以采取以下方法:先读取整行数据,再通过分割获取长度和各个值。

   String line = scanner.nextLine();
   String[] values = line.split(" ");
   int[] intValues = new int[values.length];
   int indx = 0;
   for(String value:values){
     intValues[indx++] = Integer.parseInt(value);
   }

编辑: 第二种方法:

   List<Integer> numList = new ArrayList<Integer>();
   int number = 0;
   while (number != -1) {
      System.out.println("Enter a positive integer value (or -1 to stop): ");
      number = Integer.parseInt(in.nextLine());
      if (number != -1){
        numList.add(number);
      }
   }
   in.close();

   Integer[] numArray = numList.toArray(new Integer[numList.size()]);

编辑2: 处理同一行中的多个数字,并在空行处终止。

List<Integer> numList = new ArrayList<Integer>();
while(true) {
   System.out.println("Enter a positive integer value (or -1 to stop): ");
   String line = in.nextLine();
   if(line.length() <1){
      break;
   }
   String [] numbers = line.split(" ");
   for(String num: numbers){
          numList.add(Integer.parseInt(num));
   }
 }
 in.close();

 Integer[] numArray = numList.toArray(new Integer[numList.size()]);

1
@user1791473:你有几个选项。第一:如果你知道最大输入大小,可以定义一个足够大的数组。接受所有输入并在最后截断数组,如果部分填充。第二:使用开放式集合,例如List,并在最后转换为数组(建议在其他答案中提到)。如果您计划使用第一种选项并需要帮助,请告诉我。 - Yogendra Singh
1
@user1791473:已添加第二种方法的答案。 - Yogendra Singh
1
@user1791473:已更新为使用 nextLine()。只要输入 -1,它就会停止。 - Yogendra Singh
1
@user1791473:你需要定义一些终止条件。-1只是一个例子。你可以使用任何你喜欢的条件。请分享,你想使用什么条件? - Yogendra Singh
1
@user1791473 是的。我已经更新了答案中的“EDTI2”部分,请查看。现在它只会在“空行”上终止。 - Yogendra Singh
显示剩余5条评论

1
如果您需要一个可变大小的集合,请使用ArrayList
ArrayList<Integer> lst = new ArrayList<Integer>();
lst.add(scanner.getInt());

1
你可以使用一个 ArrayList。只需填充它,最后将其转换为整数数组。或者更好的方法是保留列表并与之一起工作。
Scanner in = new Scanner(System.in);

ArrayList<Integer> intList = new ArrayList<Integer>();
while (true) {
  System.out.println("Enter a positive integer value (or -1 to stop): ");
  int number = in.nextInt();
  if (number < 0) break;
  intList.add(number);
}
// just use this last line if you really want an array. Work with the list instead if possible.
Integer[] yourFinalArray = intList.toArray(new Integer[0]);

0
如果您使用Google Guava库(https://code.google.com/p/guava-libraries/),您可以这样说:
String numbers="1 3 4 2 5 6 7";
Splitter.on(" ").split( numbers );

这将给你一个可迭代对象。如果你坚持要得到一个字符串数组,你可以这样说:

Iterables.toArray(Splitter.on(" ").split( numbers ), String.class)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接