2015-02-08 2 views
1

Я довольно новичок в Java и испытываю трудности с вводом массивов из командной строки. Например, если я запускал свою программу, используя:Как вы храните массив, указанный в качестве входных данных?

java ChessTournament {0,2,4,3,3,2,4,3,0,3} {1923,1882,2103,2210} 

Как бы сохранить их в двух отдельных целых массивах?

Поскольку аргумент в основном дает все входы как список строк, единственный способ, который я нашел, - использовать string.replace() на скобках и string.split() на запятую (см. Ниже), но, конечно, есть более простой способ ...?

Это то, что я делал до сих пор для входов типа String[]:

public static void main(String[] args) { 

    String[] arrival = new String[args[0].length()]; 
    args[0] = args[0].replace("{",""); 
    args[0] = args[0].replace("}",""); 
    arrival = (args[0]).split(","); 

    String[] departure = new String[args[1].length()]; 
    args[1] = args[1].replace("{",""); 
    args[1] = args[1].replace("}",""); 
    departure = (args[1]).split(","); 

} 
+1

вы можете поделиться тем, что код, который вы сделали до сих пор с нами? –

ответ

1

Самый простой механизм, вероятно, использовать сканер. Что-то вроде:

List<Integer> intList = new ArrayList<>(); 
Scanner scanner = new Scanner(args[0]).useDelimeter("[{},]"); 
while (scanner.hasNextInt()) 
    intList.add(scanner.nextInt()); 
+0

Что такое 'arg1'? –

+0

Guess 'arg1' - это первый аргумент, предоставленный программе Java, из' main (String [] args) '(' arg1 = args [0] ') – exception1

+0

Использовал arg1, чтобы сделать его более общим, но изменил его на args [0 ], чтобы избежать путаницы. – sprinter

0

Ваш метод честно довольно прочный. Я думаю, что это довольно краткий, и, вероятно, это так же хорошо, как и на языке Java. Тем не менее, есть две основные проблемы, которые я вижу:

  1. Он не обрабатывает ситуации, в которых аргументы не отформатированы должным образом.
  2. Он не анализирует отдельные значения для чисел.

Вы можете исправить обе эти проблемы довольно элегантно, используя регулярные выражения и потоки Java 8.

public static int[] parseIntegerArray(String data) { 
    if (!data.matches("^\\{(\\d+,)*\\d+?\\}$")) 
     throw new RuntimeException("Malformed integer array."); 
    return Arrays.stream(data.replaceAll("[{}]", "").split(",")) 
       .mapToInt(x -> Integer.parseInt(x)) 
       .toArray(); 
} 

Вы можете использовать эту функцию из main так:

if (args.length < 2) 
    throw new RuntimeException("Requires two array arguments."); 
int[] arrival = parseIntegerArray(args[0]); 
int[] departure = parseIntegerArray(args[1]); 

You can see a running example at ideone here.

+0

Не очень хорошо знакомы с потоками Java 8, но будут читать. Спасибо за вашу помощь! – kw3rti

Смежные вопросы