我试图让我的 Java 程序接受空白文本行作为输入,并在最终输出中显示它们。
基本上我已经制作了一个单词加扰程序,它应该从扫描仪中接收未指定数量的文本,单独加扰每个单词,除了每个单词的第一个和最后一个字母。我已经成功地让加扰和解析工作,所以不用担心。我正在研究的最后一个规范是,用户可以点击“返回”按钮输入空白行文本。
因此,例如,如果有人进入: 比萨是我最喜欢吃的东西
输出类似于:Pziza is my fovaitre tnhig to eat
这在一行上完美运行,但如果有人要输入:
我
喜欢
动物
只有最后一行被打印和打乱:aimnlas
我尝试了一些我通过研究发现的不同建议,但大多数都是关于文件阅读和其他对我没有奏效的建议。这就是我现在正在做的:...
Scanner input = new Scanner(System.in);
String text = "";
System.out.println("Enter text to scramble: ");
while(input.hasNextLine()){
text = input.next();
}
System.out.println(scramble(text));
任何帮助将不胜感激。谢谢大家 =)
编辑: 好的,我在想我在争夺方法中所做的事情可能是阻止我允许空行的原因。我已经看过了,似乎无法确定它,所以如果有人可以请看一下,让我知道你认为我会感激它=)
private static String scramble(String txt) {
StringTokenizer st = new StringTokenizer(txt, " ,.!?()-+/*=%@#$&:;\"'", true);
String[] tokens = new String[st.countTokens()];
String scrambled = "";
int letter = 0;
int wordlength = 0;
char[] temp;
while(st.hasMoreTokens()) {
tokens[letter] = st.nextToken();
letter++;
}
for(int i = 0; i < tokens.length; i++) {
if(tokens[i].length() <= 3) {
scrambled += tokens[i];
continue;
}
wordlength = tokens[i].length() - 1;
temp = new char[wordlength + 1];
temp[0] = tokens[i].charAt(0);
temp[wordlength] = tokens[i].charAt(wordlength);
ArrayList<Character> c = new ArrayList<Character>();
for(int j = 1; j < wordlength; j++) {
c.add(tokens[i].charAt(j));
}
Collections.shuffle(c);
String z = new String();
for(Character x:c){
z += x.toString();
}
String output = new String(temp[0] + z + temp[wordlength]);
scrambled += output;
}
return scrambled;
}