【问题标题】:Java ArrayList, taking user input of multiple types(int, String etc.) in one lineJava ArrayList,在一行中获取多种类型(int、String 等)的用户输入
【发布时间】:2013-09-15 01:28:59
【问题描述】:

我正在努力在 Java 方面做得更好一些,我遇到的一个问题是接受用户输入,就像这样:

System.out.println("Please input numbers that you would like to work with");

    //Read in user input into ArrayList, taking into account that they may input Strings or anything else.

假设用户输入类似这样的内容

1、2、4、257、狗、兔、7、#

甚至

1 2 4 257 狗兔 7 #

我曾在多个地方看到过如何一次读取一个输入,但我不确定一次读取动态 ArrayList 的最佳方式。

我并不真正关心使用逗号或不使用逗号的区别,因为从逻辑上讲,我认为我知道该怎么做,并且还没有尝试过,所以真正的主要问题如上所述(阅读用户当用户一次输入所有数字时,输入到动态大小的 ArrayList 中)。谢谢,我不一定要寻找代码,这不是家庭作业,只是想知道最好的方法。只需从逻辑上说明它是如何完成的就可以了,但代码是值得赞赏的。

【问题讨论】:

  • 您必须将每个条目作为字符串读取。之后,您可以将它们转换为正确的类型,可能通过检查它们是否为数字。如果您想将它们全部存储在一个数组中,您可以创建一个ArrayList<Object>,但这取决于您的用例。 stackoverflow.com/questions/1102891/…
  • 感谢您的链接,它完美地回答了这部分问题。
  • 以下所有 3 个答案都很棒,我只是选择了一个逻辑最简单的答案(对我来说)。非常感谢您的帮助。

标签: java arrays arraylist user-input


【解决方案1】:

试试这个简单的例子来打印数组列表值

     import java.util.*;
        class SimpleArrayList{
            public static void main(String args[]){
                List l=new ArrayList();
                System.out.println("Enter the input");
                Scanner input=new Scanner(System.in);

                 String a =input.nextLine();
                 l.add(a);
       // use this to iterate the value inside the arraylist.
      /* for (int i = 0; i < l.size(); i++) {
          System.out.println(l.get(i));
              } */
                    System.out.println(l);

            }

        }

【讨论】:

    【解决方案2】:

    我认为关于如何从System.in 读取数据的答案已经足够多,我将在此处采用不同的方法。首先你应该知道这不是在java中获取数据的主要方式。事实上,十多年来我从未使用过它。这就是为什么没有完整的现成解决方案可以将结构化数据放入某个容器(如 ArrayList)中。相反,每行只得到一个字符串。你必须自己处理。这个过程称为解析。根据所选语法的复杂性,有几种方法,例如在更复杂的情况下使用解析器生成器,或者在更简单的情况下手动编写解析器。我想了解您的第一个建议,并将其描述为用可选空格分隔的逗号。对于这样的语法,类 Scanner 提供了相当多的支持。可以识别数字并且标记化几乎是自动完成的。但是,如果您有更具体的数据,您可能需要做一些额外的工作,就像我用动物地图演示的那样,我用来转换这种非常特殊的数据类型。为了足够灵活地解决所有现实世界的问题,不可能有现成的解决方案。只有全面的支持才能构建您自己的。

      Map<String, Animal> animals = ...
      Scanner scanner = new Scanner("1, 2, 4, 257, dog, rabbit, 7, #").useDelimiter(",");
      while (scanner.hasNext()) {
        if (scanner.hasNextInt()) {
          result.add(scanner.nextInt());
        } else {
          String val = scanner.next();
          if (animals.containsKey(val)) {
            result.add(animals.get(val));
          } else {
            result.add(val);
          }
        }
      }
    

    【讨论】:

      【解决方案3】:

      您可以尝试使用此代码在 arraylist 中动态获取输入并存储在 arraylist 中

      import java.util.ArrayList;
      import java.util.Scanner;
      
      public class HelloWorld
      {
      
       public static void main(String []args){
           Scanner sc=new Scanner(System.in);
           String j;
           ArrayList l=new ArrayList();
           for(int i=0;i<6;i++)
           {  j=sc.nextLine();
               l.add(j);
           }
          System.out.println("Hello World"+l);
       }
      }
      

      【讨论】:

        【解决方案4】:

        一种方法是将输入标记化,然后将其添加到这样的数组中:


            Scanner scn = new Scanner(System.in);
            System.out.println("Put in a set: ");
            String input = scn.nextLine();
            System.out.println(input);
            Scanner tokenizer = new Scanner(input);
            tokenizer.useDelimiter(" ");
            ArrayList<Object> arr = new ArrayList<Object>();
            while(tokenizer.hasNext())
            {
                arr.add(tokenizer.next());
                System.out.println(arr.get(arr.size()-1));
            }
            System.out.println(arr);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-11-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-09
          • 2021-08-14
          • 2021-03-15
          • 1970-01-01
          相关资源
          最近更新 更多