почему символы в моей строке печатаются в неправильном порядке только в командной строке Windows? - PullRequest
0 голосов
/ 08 мая 2018

Я создал небольшой фрагмент кода, который просто шифрует строку, используя генератор случайных чисел. Все работает нормально, когда я запускаю программу, используя netbeans. Однако, если я пытаюсь запустить файл .jar из командной строки, вывод искажается. Кажется, он не искажен случайно, последние несколько букв всегда появляются первыми. В других случаях он просто пропускает часть строки.

Когда я пытался использовать строковые литералы вместо ввода из командной строки, все работало нормально. Поэтому я предполагаю, что существует проблема со входной частью программы.

Этот фрагмент кода находится в основном методе

        while(true){
        System.out.print("$");

        Scanner s = new Scanner(System.in);
        s.useDelimiter("\n");
        String in = s.next();
        String out = "";

        if (in.startsWith("ks")) {
            out = ScrambleString.keepSpaces(in.substring(3));
        } else if (in.startsWith("fr")) {
            out = ScrambleString.fullRandom(in.substring(3));
        } else if (in.startsWith("kw")) {
            out = ScrambleString.randomByWords(in.substring(3));
        } else if (in.equals("exit")) {
            break;
        } else {
            System.out.println(" Syntax: [fr:ks:kw] sentence\n fr full random \n ks keep spaces \n kw keep words");
        }

        System.out.println(">>" + out); 
        }

Это статические функции, вызываемые сверху

/**
 * only ignore spaces while randomizing
 *
 * @param a
 * @return
 */
public static String keepSpaces(String a) {
    a = a.toLowerCase();

    char[] s = a.toCharArray();

    Random r = new Random();
    for (int i = 0; i < s.length; i++) {
        char t = s[i];
        int num = r.nextInt(s.length);

        if (s[i] != ' ' && s[num] != ' ') {
            s[i] = s[num];
            s[num] = t;
        }

    }
    return String.valueOf(s);
}

/**
 * randomize every char regardless of word or space
 *
 * @param a
 * @return
 */
public static String fullRandom(String a) {

    a = a.toLowerCase();

    char[] s = a.toCharArray();

    Random r = new Random();
    for (int i = 0; i < s.length; i++) {
        char t = s[i];
        int num = r.nextInt(s.length);

        s[i] = s[num];
        s[num] = t;

    }
    return String.valueOf(s);
}

/**
 * change the order of the characters per word. words are separated by spaces
 *
 * @param a
 * @return
 */
public static String randomByWords(String a) {
    String[] words = a.split(" ");
    String out = "";
    for (int i = 0; i < words.length; i++) {
        out += fullRandom(words[i]) + " ";
    }

    return out;
}

Вот тестовый прогон в cmd: TestRunCMD

А вот тестовый прогон с использованием netbeans: testRunNetbeans

...