Java 编程 - 允许扫描仪中出现空行

标签 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));

任何帮助将不胜感激。谢谢大家=)

编辑: 好吧,我想我在打乱方法中所做的事情可能是阻止我允许空行的原因。我已经看过了,但似乎无法确定它,所以如果有人可以看一下并告诉我你的想法,我会很感激 =)

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

最佳答案

当从System.in读取时,默认情况下,您是从键盘读取的,这是一个无限的输入流,因此Scanner.hasNextLine()将始终返回正确。

一种解决方案是一次读取一行,然后使用 String.split() 将每一行拆分为单词:

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));
    }    
}

关于Java 编程 - 允许扫描仪中出现空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12522190/

相关文章:

java - 如何在 JavaFX 上使用 checkBox 选择行?

java 。内存不足

javascript - 仅使用文本偏移量在字符串中插入标签

java - mouseEvent 和 keyEvent 使用相同的整数代码吗?

java - Hadoop JAr 中的 newFolderPath=Path.mergePaths(workingDir, newFolderPath)

java - Java 中 HashMap 的奇怪行为

c++ - 如何在 C++ 中管理位/二进制文件?

javascript - javascript 函数和 HTML 中的文本转换/动画 onclick

c# - StreamReader 问题查找文件

c - 这句话的含义是什么 t=(input[i]= ='t' || input[i]= ='T' );