web-dev-qa-db-ja.com

Java ArrayList、複数のタイプ(int、Stringなど)のユーザー入力を1行で取得

私はJavaを少し上達させることに取り組んでいますが、私が遭遇した問題は、次のようにすべて1行でユーザー入力を取得することです。

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#

一度に1つの入力を読み取る方法をいくつかの場所で見てきましたが、動的ArrayListを一度に読み取るための最良の方法がわかりませんでした。

論理的にはそれを行う方法を知っていると思いますが、まだ試していませんので、コンマを使用する場合と使用しない場合の違いについてはあまり気にしません。したがって、実際の主な問題は上記のとおりです(ユーザー入力をArrayListに読み込む)ユーザーがすべての数値を一度に入力したときの動的サイズ)。おかげで、私は必ずしもコードを探しているわけではありません。これは宿題ではなく、これを行うための最良の方法を考えているだけです。それがどのように行われるかを論理的に述べるだけでうまくいきますが、コードは大歓迎です。

5
trueCamelType

この簡単な例を試して、配列リストの値を出力してください

     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);

            }

        }
5
Nambi

System.inからデータを読み取る方法については十分な答えがあると思うので、ここでは別のアプローチを取ります。まず、これがJavaでデータを取得する主要な方法ではないことに注意する必要があります。実際、10年以上私はそれを使用したことがありません。そのため、構造化されたデータをいくつかのコンテナー(ArrayListなど)に入れるための完全なすぐに使用できるソリューションがありません。代わりに、1行に1つの文字列を取得します。そして、あなたは自分でそれに対処しなければなりません。このプロセスは解析と呼ばれます。選択した構文の複雑さに応じて、より複雑な場合はパーサジェネレータを使用する、より単純な場合は手動でパーサを作成するなど、いくつかのアプローチがあります。私はあなたの最初の提案に入り、それをオプションの空白で区切られたコンマとして説明したいと思います。このような構文の場合、クラス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
Sir RotN

1つのアプローチは、入力をトークン化してから、次のように配列に追加することです。


    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);
1
false_memories

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);
 }
}
0
Rakesh Divedi