Удалить последовательные 0-е записи в args [] для интерфейса командной строки Java? - PullRequest
0 голосов
/ 17 июня 2010

Я помню, что где-то видел пример, который прошел через аргументы String [], удалив наименьшее значение (я)

public static void main( String args[]) {
    while (args.length > 0 ) {
    // do something and obliterate elements from args[]
    }
}

Очевидно, переменная, отслеживающая текущую позицию в args и по сравнению с args.length, сделает это; или ArrayList, созданный из содержимого args [], с argsAL.size (). Я неправильно помню пример ArrayList? Я знаю, что это пограничный вопрос, вероятный ответ: «Нет, нет и не должно быть!». Может быть, я слишком сосредоточен ...

Bill

Ответы [ 7 ]

5 голосов
/ 17 июня 2010

Нет, нет и не должно быть!Удаление из передней части массива было бы излишне дорогим способом сделать это.

Возможно, вы думаете о многих языках сценариев, имеющих оператор shift для удаления следующего элемента (perl, bash и т. Д.).

Редактировать: Просто для потомков, вот довольно простая реализация Queue, которая позволила бы вам «подделать» ту же самую функциональность (т.е. инкапсулировать курсор):1010 * Использование:

public static void main(String[] args) throws Exception {
    Queue<String> argQ = new ArrayQueue<String>(args);
    String command = argQ.poll();
    String target = argQ.poll();
}

Предупреждение: не проверено

3 голосов
/ 17 июня 2010

Вы действительно должны использовать анализатор аргументов. Мой любимый Простой анализатор аргументов Java (JSAP). Нет никаких оснований манипулировать массивом args [] напрямую. Я использую JSAP даже для самых простых программ командной строки, потому что в конечном итоге они больше не являются «базовыми».

2 голосов
/ 17 июня 2010

Если вы планируете выталкивать элементы, не используйте список массивов, поскольку весь массив нужно будет скопировать несколько раз. Вместо этого сделайте что-то вроде этого:

public static void main(String args[]) {
    for (String arg : args) {
        // consume arg somehow
    }
}
1 голос
/ 17 июня 2010

Это был бы странный способ сделать это.Технически дороже, но если у вас нет какой-то сумасшедшей большой командной строки, это даже не вопрос.

Было предложено уже использовать цикл, и это определенно может работать.

Для лучшего контроля параметров командной строки проверьте java-getopt .

1 голос
/ 17 июня 2010

... Я неправильно запомнил пример ArrayList? ..

Возможно или какой-то другой язык программирования.

У некоторых из них есть метод shift, который при вызове делает это, дает вам 0-й элемент и удаляет его, что-то вроде:

main( args: Array[String) {
    name = args.at(0)
    args.shift
    lastName = args.at(0)
    args.shift
}
1 голос
/ 17 июня 2010

Просто используйте цикл for, за исключением тех случаев, когда вы действительно любите arraycopy.

С точки зрения производительности это также не имеет значения, большинство командных строк не имеют значения, за исключением более 32 тыс. Символов, и я не думаю, чтоВаше приложение обычно используется для 16k аргументов в командной строке.

0 голосов
/ 17 июня 2010

Вы действительно должны использовать список, возможно, используя java.util.Arrays.asList(args). Затем вы заказали прохождение и простое удаление передних и задних элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...