2013-09-15 3 views
2

Я работаю над тем, чтобы немного улучшить Java, и проблема, с которой я столкнулся, - это ввод пользовательского ввода, все в одном линии, как это:Java ArrayList, принимая пользовательский ввод нескольких типов (int, String и т. Д.) В одной строке

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 динамического размера, когда пользователь вводит все числа одновременно). Спасибо, и я не обязательно ищу код, это не домашнее задание, просто интересно, как это сделать. Просто логически сформулировать, как это будет сделано, будет работать, но код ценится.

+1

Вы должны прочитать каждую запись в виде строк. После этого вы можете применить их к правильному типу, возможно, проверив, являются ли они числовыми. Вы можете создать 'ArrayList ', если вы хотите сохранить их все в одном массиве, но это зависит от вашего варианта использования. http://stackoverflow.com/questions/1102891/how-to-check-a-string-is-a-numeric-type-in-java –

+0

Спасибо за ссылку, которая отлично отвечает на эту часть вопроса. – trueCamelType

+1

Все 3 ответа ниже велики, я только что выбрал один с самой простой логикой, чтобы следовать (для меня). Очень ценю помощь. – trueCamelType

ответ

2

попробовать этот простой пример печати ArrayList значения

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

      } 

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

Как я думаю, есть достаточно ответов на то, как читать данные от System.in, здесь я буду использовать другой подход. Сначала вы должны знать, что это не основной способ получения данных в java. На самом деле более 10 лет я никогда не использовал его. Вот почему нет готового к использованию решения для получения данных, собранных в какой-либо контейнер (например, 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); 
     } 
    } 
    } 
0

вы можете попробовать этот код для принятия ввода в 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); 
} 
} 
Смежные вопросы