Эхо реализованы в Java


Я реализовал простую версию Эхо(1) командной строки. Программа работает как описано в MAN-странице: он пишет в стандартный вывод всех аргументов командной строки, разделенные пробелами и заканчиваться символом перевода строки. Он может обрабатывать опцию -n чтобы избежать, чтобы напечатать символ новой строки.

О моей реализации, она неполная, потому что он не интерпретировать общие экранированы обратным слешем символы (например \n, \cи так далее). я использовал StringBuilder объект для сборки выходной строки, потому что я не уверен, что стандартный вывод буферизуется. Я также сделать некоторые проверки, чтобы программа могла работать без указания каких-либо аргументов.

Вы можете скомпилировать программу с javac JEcho и запустить его с java JEcho <...>.

JEcho.java

/**
 * JEcho writes any command line argument to the standard output; each argument
 * is separated by a single whitespace and end with a newline (you can
 * specify '-n' to suppress the newline).
 *
 * This program doesn't interpret common backslash-escaped characters (for
 * exampe '\n' or '\c').
 */
public class JEcho {
    public static void main(String[] args) {
        boolean printNewline = true;
        int posArgs = 0;

        if (args.length > 0 && args[0].equals("-n")) {
                printNewline = false;
                posArgs = 1;
        }

        StringBuilder outputBuilder = new StringBuilder();

        for (; posArgs < args.length; posArgs++) {
            outputBuilder.append(args[posArgs]);
            outputBuilder.append(" "); // Separator.
        }

        // Remove the trailing whitespace at the end.
        int outputLength = outputBuilder.length();
        if (outputLength > 0)
            outputBuilder.deleteCharAt(outputBuilder.length() - 1);

        String output = outputBuilder.toString();

        if (printNewline)
            System.out.println(output);
        else
            System.out.print(output);
    }
}


Комментарии
2 ответа

Если вы используете Java 8, вы можете использовать StringJoiner.

/**
* JEcho writes any command line argument to the standard output; each argument
* is separated by a single whitespace and end with a newline (you can
* specify '-n' to suppress the newline).
*
* This program doesn't interpret common backslash-escaped characters (for
* exampe '\n' or '\c').
*/
public class JEcho {
public static void main(String[] args) {
boolean printNewline = true;
int posArgs = 0;

if (args.length > 0 && args[0].equals("-n")) {
printNewline = false;
posArgs = 1;
}

StringJoiner outputBuilder = new StringJoiner(" ");

for (; posArgs < args.length; posArgs++) {
outputBuilder.add(args[posArgs]);
}

String output = outputBuilder.toString();

if (printNewline)
System.out.println(output);
else
System.out.print(output);
}
}

6
ответ дан 15 февраля 2018 в 01:02 Источник Поделиться

как в тренажерный зал я бы посоветовал вам держать ваши параметры List<String>...

public static void main(String[] args) {
boolean printNewline = true;
List<String> parameters = new ArrayList<>(Arrays.asList(args);
if (args.length > 0 && isNewLine(args[0]) ) {
printNewline = false;
parameters.remove(0); //remove the first one
}

String output = parameters.stream()
.collect(Collectors.joining(" ", "", printNewLine ? System.lineSeparator() : "")

System.out.print(output);
}

Примечание: Способ isNewLine() здесь не показано, но рекомендуется использовать такой метод для предотвращения недостающий аргумент... думаю -n, -N, /n, /N, все эти параметры можно отрегулировать в isNewLine-способ...

3
ответ дан 15 февраля 2018 в 01:02 Источник Поделиться