簡體   English   中英

一個簡單的Java程序輸出與IO所不同

[英]A simple java program output is not as expected with IO

我有一個未按預期工作的代碼,它必須使用System.in.read()方法執行某些操作。 該程序旨在從控制台讀取,直到我按“ c”或“ C”

import java.io.*;

public class Input{
    public static void main(String args[])throws IOException{
        char b;

        outer:
        do{
            b= (char)System.in.read();
            System.out.println(b);
            if(b=='c'||b=='C'){
               break outer;
            }
        } while(true);      
    }
}

輸出是

D:\ex\1>java Input
d
d



c
c

D:\ex\1>

為什么輸出中有空行

第一次調用read時,它將讀取'd'並用新行將其打印(因為您使用了println而不是print )。 這解釋了第一行。 在循環的第一次迭代之后,再次調用read 這次,它讀取回車符'\\r' 調用第三次read ,它將讀取換行符'\\n' 這就是為什么有3條新線的原因。

這些換行符從哪里來?

每次輸入一個字符時,您都按“輸入”對嗎? 那是新線! 由於您使用的是Windows,因此會插入\\r\\n 在Mac上,換行只是\\n 這就是為什么在Mac上運行時,您的代碼生成2行而不是3行的原因。

解決方案是不讀取新行:

do{
     b= (char)System.in.read();
     if (b == '\r' || b == '\n') continue;
     System.out.println(b);
        if(b=='c'||b=='C'){break outer;}

}while(true);

或者您可以使用Scanner

char b;
Scanner sc = new Scanner(System.in);
outer:
do{
    b= sc.findWithinHorizon(".", 0).charAt(0);
    System.out.println(b);
    if(b=='c'||b=='C'){break outer;}

}while(true);

只需替換System.out.println(b);

int a = (int) b;
if (a != 13 && a != 10) {
    System.out.println(b);
}

如果它的int值是換行和回車,它將不打印字符

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM