与java

时间:2016-01-04 08:30:29

标签: java

  1. 当我仅使用// 1 - start运行代码时,输​​出为输入字符的ascii值
  2. 当我仅使用// 2 - start运行代码时,输​​出是由换行符终止的输入字符串
  3. 当我用两者运行代码时(如下面的代码所示),只有// 1 - start执行,readLine()正以一种奇怪的方式被考虑。
  4. 当我用两者运行代码时(// 2 - 开始位于// 1 - start之上),两个代码都执行正常,
  5. 请解释为什么这种奇怪的行为发生在案例3中,但不是案例4。

    public class InputBufferedReader {
    
      public static void main(String[] args) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        try {
            //1-start
            //read one character
            System.out.println("enter input: ");
            int b= br.read();
            System.out.println(b);
            //end
    
            //2-start
            //read a string
            System.out.println("enter input string: ");
            String a = br.readLine();
            System.out.println(a);
            //end
        } catch (IOException e) {
            e.printStackTrace();
        }
      }
    }
    

2 个答案:

答案 0 :(得分:5)

您的BufferedReaderInputStreamReaderSystem.in一起使用。 BufferedReader使用read()中的InputStreamReader方法从标准输入流System.in中读取数据。现在让我们来看看这个read()方法的API。

  

[...]此方法将阻塞,直到输入数据可用,检测到流的末尾或抛出异常。

此上下文中的阻止装置等待用户通过控制台使用Enter键确认输入数据 考虑到这一点,让我们检查你的案例 1。 int b= br.read();没有输入任何内容,因此此方法会阻止,直到用户输入内容然后打印第一个字符的ascci值。
2。 String a = br.readLine();没有输入任何内容,因此此方法会阻止,直到用户输入内容然后打印整行。
3。

int b= br.read();

让图片用户键入a,使用Enter键确认输入为a\n。现在read()读取第一个字符a

String a = br.readLine();

read()调用不会阻止并请求用户输入,因为还有未使用的输入\n。因此readLine()会读\n 4

String a = br.readLine();

要求用户输入通过Enter键确认的输入。整行将被阅读。

int b= br.read();

没有剩余未使用的数据,因为readLine()已经读取了整行,包括\n个字符。因此,要求输入read()呼叫块和用户。

答案 1 :(得分:1)

int read()方法尝试从控制台(或文件)读取下一个字符并返回其 Unicode值

由于此方法在打印时必须返回Unicode值,我们应该执行类型转换。

如果没有下一个字符,我们将获得 -1

字符串readLine()方法尝试从控制台(或文件)读取下一行并返回它(如果可用)。

如果Next行不可用,则返回null。