java - hvorfor er tegnene i min streng udskrivning kun i den forkerte rækkefølge på Windows-kommandoprompten?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har lavet et lille stykke kode, der blot scrambles en streng ved hjælp af tilfældig talgeneratoren. Alt fungerer fint, når jeg kører programmet ved hjælp af netbeans. Men hvis jeg forsøger at køre .jar-filen fra kommandoprompten, er udgangen forstyrret. Det ser ud til at være forstyrret tilfældigt, men de sidste få bogstaver vises altid først. Andre gange udelades det bare en del af strengen.


Da jeg forsøgte at bruge strengbogstaver i stedet for at bruge input fra kommandolinjen, fungerede alt fint. Så jeg antager, at der er et problem med input-delen af ​​programmet specifiaclly.


Denne del af koden findes i hovedmetoden


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

        Scanner s = new Scanner(System.in);
        s.useDelimiter("
");
        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
 fr full random 
 ks keep spaces 
 kw keep words");
        }

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


Disse kaldes de statiske funktioner fra oven


/**
 * 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;
}


Her er en testkørsel i cmd: TestRunCMD [3]


Og her er en testkørsel med netbeans:
testRunNetbeans [4]

Bedste reference