Java编程-允许扫描器中出现空行
我试图让我的Java程序接受空白文本行作为输入,并在最终输出中显示它们 基本上,我已经制作了一个单词置乱程序,该程序应该从扫描仪中接收未指定数量的文本,对每个单词进行单独置乱,除了每个单词的第一个和最后一个字母。我已经成功地完成了置乱和解析,所以不用担心。我正在研究的最后一个规范是,用户可能会点击“返回”按钮,输入一行空白文本 例如,如果有人要进入: 比萨饼是我最喜欢吃的东西 输出类似于: Pziza是我最喜欢吃的食物 这在一条线上非常有效,但如果有人进入: 我 像 动物 只有最后一行被打印和置乱: 艾姆拉斯 我尝试了一些通过研究发现的不同建议,但大多数都是关于文件阅读和其他对我没有效果的建议。 这就是我现在正在做的:Java编程-允许扫描器中出现空行,java,text,input,scramble,Java,Text,Input,Scramble,我试图让我的Java程序接受空白文本行作为输入,并在最终输出中显示它们 基本上,我已经制作了一个单词置乱程序,该程序应该从扫描仪中接收未指定数量的文本,对每个单词进行单独置乱,除了每个单词的第一个和最后一个字母。我已经成功地完成了置乱和解析,所以不用担心。我正在研究的最后一个规范是,用户可能会点击“返回”按钮,输入一行空白文本 例如,如果有人要进入: 比萨饼是我最喜欢吃的东西 输出类似于: Pziza是我最喜欢吃的食物 这在一条线上非常有效,但如果有人进入: 我 像 动物 只有最后一行被打印和置
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));
任何帮助都将不胜感激。谢谢大家=)
编辑:
好的,我在想我在置乱方法中做的一些事情可能是阻止我允许空白行的原因。我已经看了一遍,似乎无法准确指出,所以如果有人能看一下,让我知道你认为我会很感激它=)
私有静态字符串加扰(字符串txt){
StringTokenizer st=新的StringTokenizer(txt,“,.!?()-+/*=%@$&:;\”,true);
String[]tokens=新字符串[st.countTokens()];
字符串加扰=”;
int字母=0;
int字长=0;
字符[]温度;
而(st.hasMoreTokens()){
代币[字母]=st.nextToken();
字母++;
}
for(int i=0;i 从System.in
读取时,如果(标记[i].length(),默认情况下,您是从键盘读取的,这是一个无限的输入流,因此Scanner.hasnetline()
将始终返回true
一种解决方案是一次读取一行,然后使用String.split()
将每行拆分为单词:
谢谢=)这似乎很有效,但是你知道有什么方法可以不用声明另一个扫描仪就可以做到这一点吗?是的,String.split
是一种更好的方法。:)
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;
}
Scanner input = new Scanner(System.in);
String text = "";
System.out.println("Enter text to scramble: ");
boolean done = false;
while (!done) {
text = input.nextLine();
if (text.equals("")) {
done = true;
} else {
performScramble(text);
}
}
...
void performScramble(String line) {
String[] words = line.split("\\s+");
for (String word: words) {
System.out.println(scramble(word));
}
}