这是我的程序。
//这里我们使用BufferredReader从控制台读取字符
package fileIO;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BRRead {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char ch;
System.out.println("Enter characters, 'q' to quit.");
do {
ch = (char)br.read();
System.out.println(ch);
} while(ch!='q');
}
}
输入1:testq
输出:
t
e
s
t
输入2:test
输出:
t
e
s
t
">
">
">
">
,"表示空行。我的问题是为什么4空行打印的情况下,输入字符不包含字母'q',但不打印时,输入字符包含字母'q'?
完整答案在底部
根本没有运行它来检查,尽管看起来它可能与使用do-while
循环而不是while
循环有关
这种格式将确保这个角色'q'
之前不读它试图输出任何
while(ch!='q')
{
System.out.println(ch);
ch = (char)br.read();
}
这个格式在测试读字符是否有效之前打印读字符
do {
ch = (char)br.read();
System.out.println(ch);
} while(ch!='q');
试错后编辑
在这个版本中,我使用了非常相似的Scanner
类,并且我更熟悉它。它可能是这样的:
- 创建读取
BufferedReader
、Scanner
等数据的对象 - 检查是否有内容
- 接受数据为
String
并读取第一个字符 String
is不是q
的输出- 循环测试->读→打印→循环,直到输入
q
Scanner input = new Scanner(System.in);
System.out.println("Enter characters, 'q' to quit.");
String read = input.nextLine();
while(read.length() <= 1 && read.charAt(0) != 'q')
{
System.out.print(read);
read = input.nextLine();
}
(几乎)原始方法*
Eureaka !
- name.read()读取单个字符——然而,这返回一个
int
数据类型,不能用(char)
掩码转换。 - name.readLine()读取一行文本——使用此方法,您可以简单地取索引0 处的字符
https://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html
do {
full = br.readLine();
System.out.print(full);
} while(full.length() <= 1) && full.charAt(0) != 'q');
不确定do-while
和while
循环之间的最佳方法是什么,这可能最终归结为用例和意见。你可能也想创建一个boolean
方法
// true if String matches 'q' or "quit"
public static boolean isQuit(input)
{
String lowercase = input.toLower();
char start = input.charAt(0);
return (lowercase.equals("quit")
|| (input.length() <= 1 && start == 'q'));
}