我试图使用来自algs4 StdIn.java的readChar()将不确定数量的字符读入我的数据结构中。可能输入的行数也是未知的,应忽略空格/制表符。
例如,样本输入
ABC D
EF
应该被理解为
ABDCEF
进入我的结构。
我很难找到合适的循环来让StdIn按照我想要的方式行事,而不是让我陷入无限循环。
答案 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