【问题标题】:While loop using standard input使用标准输入的while循环
【发布时间】:2015-10-08 21:57:50
【问题描述】:

我正在尝试使用来自 algs4 StdIn.java 的 readChar() 将不确定数量的字符读入我的数据结构。可能输入的行数也是未知的,应该忽略空格/制表符。

例如,样本输入

ABC D
EF

应该读作

ABDCEF

进入我的结构。

我很难找到合适的循环来让 StdIn 按我的意愿行事,而不是让我陷入无限循环。

【问题讨论】:

  • 您希望它如何运作?它应该以字符结尾吗?它是否要求回答是/否以继续?需要比这更多的细节。
  • 意味着一旦没有更多输入要读取,循环就结束,即以空格开头的新行。

标签: java input io while-loop stdin


【解决方案1】:

该文件为您提供了相当多的信息。只需使用 readAllLines,然后通过 StringBuffer.append() 将它们组合成一行。因此,您遍历每一行,然后遍历每一行中的每个字符。如果不是空格,则将其附加到 StringBuffer。最后打印出 StringBuffer() 的 toString。该代码有处理换行符 (\n) 和返回 (\r) 的规定。

public static void main(String[] args) {
    StringBuffer sb = new StringBuffer();
    String[] lines = StdIn.readAllLines();
    for (int i = 0; i < lines.length; i++) {
        String line = lines[i];
        char[] charArray = line.toCharArray();
        for (int j = 0; j < charArray.length; j++) {
            char c = charArray[j];
            if (c != ' '){
                sb.append(c);
            }
        }
    }
    System.out.println(sb.toString());
}

运行它:

ABC DEF 
XYZ

输出:

ABCDEFXYZ

【讨论】:

    【解决方案2】:

    输入输入后,您必须按 Ctrl-Z(至少在 eclipse 中运行的窗口上)来告诉 StdIn 类没有更多输入

        StringBuilder sb = new StringBuilder();
        char c;
        while (StdIn.hasNextChar()) {
            c = StdIn.readChar();
            if (c != '\n' && c != '\r' && c != ' ') { // plus add the unicode whitespace characters mentioned in the top comment
                sb.append(c);
            }
        }
    
        System.out.println(sb.toString());
    

    【讨论】:

      猜你喜欢
      • 2016-05-08
      • 1970-01-01
      • 2017-11-25
      • 1970-01-01
      • 2013-11-16
      • 2020-02-15
      • 1970-01-01
      • 2018-03-23
      • 2016-09-01
      相关资源
      最近更新 更多