while循环使用标准输入

时间:2015-10-08 21:57:51

标签: java input io while-loop stdin

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

例如,样本输入

ABC D
EF

应该被理解为

ABDCEF

进入我的结构。

我很难找到合适的循环来让StdIn按照我想要的方式行事,而不是让我陷入无限循环。

2 个答案:

答案 0 :(得分:1)

输入输入后,你必须按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());

答案 1 :(得分: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