Разделить строку с кавычками, повторно используя метод, который анализирует аргументы в main - PullRequest
0 голосов
/ 04 июля 2010

в маленькой программе, которую я пишу, мне нужно проанализировать строку ввода пользователя. В основном, что нужно сделать, это разделить строку на массив строк так же, как это делается с аргументами main (), т.е. я ищу что-то вроде этого:

String[] splitArgs(String cmdLine);

Мне просто интересно, если бы аргументы основных методов анализировались таким образом до вызова самого main, разве нельзя было бы вызвать этот метод вместо того, чтобы писать свой собственный? Итак, кто-нибудь знает, где найти этот метод?

Спасибо, Axel

Ответы [ 4 ]

5 голосов
/ 04 июля 2010

На глобусе

Аргумент командной строки анализируется оболочкой; именно поэтому, например, * обычно расширяется до списка файлов. Это называется «глобализация», и это происходит вне вашей программы, даже до того, как JVM запускается.

Смотрите также

Похожие вопросы


О расщеплении строк

Что касается разбиения строк на массив строк, ваш самый простой вариант: String.split(String regex).

Вот очень простой пример:

    String[] parts = "one two three".split(" ");
    for (String part : parts) {
        System.out.println("[" + part + "]");
    }

Отпечатки выше:

[one]
[two]
[three]

Аргумент String для split является регулярным выражением.

Ссылки


Scanner опция

Другой вариант, который вы можете использовать: java.util.Scanner. Это гораздо более улучшенная версия устаревшего StringTokenizer.

Похожие вопросы


Вариант гуавы

Для более мощной String функции разделения вы можете использовать, например, Splitter из Гуавы.

4 голосов
/ 04 июля 2010

Нет, этот разбор выполняется оболочкой или системной библиотекой (в Windows), а не Java. Вы можете использовать ProcessBuilder и sh -c (или cmd в Windows). Что-то вроде:

new ProcessBuilder("sh", "-c", "java Program " + cmdLine).start();
0 голосов
/ 10 февраля 2015

Я только что нашел apache commons exec другой способ исправить это.

public static String[] splitArgsStr(String argsStr) {
    org.apache.commons.exec.CommandLine execCommandLine = new org.apache.commons.exec.CommandLine("sh");
    execCommandLine.addArguments(argsStr, false);
    return execCommandLine.getArguments();
}

И последняя зависимость maven:

<dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-exec</artifactId>
        <version>1.3</version>
    </dependency>
0 голосов
/ 04 июля 2010

Такой анализ обычно выполняется оболочкой. Таким образом, функция, которую вы ищете, будет частью совершенно отдельной программы, которая, вероятно, написана на C. К тому времени, когда Java VM даже запускается, аргументы уже проанализированы.

...