JAVA

[JAVA] System.in.read()

hail2y 2024. 6. 30. 23:34

System.in.read()

  • Scanner, BufferReader 말고 입력값을 받는다.
  • 아스키코드로 값을 받는다.
  • 버퍼를 사용하기 때문에 throws IOException 예외처리를 해 준다.
  • 숫자로 값을 받으려면 0의 아스키코드 값인 48을 빼준다. ex) -'0' , -48
  • 문자로 값을 받으려면 (char) 형변환을 해 준다.
  • 문자열 출력도 가능 -- 문자 하나당 byte로 받는데 byte 배열로 받은 후 new String(byte[])하여 출력

 

디버깅 모드로 1을 입력하고 엔터를 치게 되면 차례로 1의 아스키코드 값인 49와 엔터(LF; line feed) 값인 10이 들어가게 되어 원래 의도대로 실행되지 않는다. 엔터까지 인식하게 되어서! 그래서 이 점을 주의하고 사용하여야 한다. 안전하게 각각을 주석 처리하거나 scanner를 사용할 때처럼 엔터를 버리도록 한번 더 입력한다. 

import java.io.IOException;

public class ex_systemInRead {
    public static void main(String[] args) throws IOException {
        int ex1 = System.in.read(); // 1
        System.out.println(ex1); // 49
        System.in.read(); 


        int ex2 = System.in.read(); // 1
        System.out.println(ex2-'0'); // 1
        System.in.read();

        char ex3 = (char) System.in.read(); // c
        System.out.println(ex3); // c
        System.in.read();

        byte[] chs = new byte[6];
        System.in.read(chs); // hello\n
        String s = new String(chs); // hello\n
        System.out.println(s);
    }
}

 

문자열을 출력할 때 배열 크기보다 더 적게 문자열을 입력하게 되면 공백이 아닌 null 값이 포함되어 출력된다. 

 

cf. OS별 줄바꿈 문자 '\n' 인식

windowOS: CRLF('\r\n')

Unix 계열 OS: LF('\n')만 사용하여 인식

 

* 아스키코드

 

 

https://velog.io/@pearpearb/TIL-40-%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B3%B5%ED%95%99

 

https://jw910911.tistory.com/90

 

개발 용어 : 캐리지 리턴(CR), 라인 피드 (LF) 알아보기

캐리지 리턴(CR)과 라인 피드(LF)란? 프로그래밍을 하다보면 \n으로 되어있는 문자를 만나게 됩니다. 보통 줄내림이라는 뜻인데 윈도우에서 이것저것 하다보면 \n이 아닌 \r\n도 만날 때가 있습니다

jw910911.tistory.com

https://devyoseph.tistory.com/141

 

Java: System.in.read(); 이해하기, 입력값을 알뜰하게 받기

System.in.read() Scanner, BufferedReader를 사용하지 않고 입력값을 받을 수 있다. 버퍼(InputStream)를 사용하기 때문에 효율적이며 IOException의 throw를 필수적으로 해주어야 한다. 문자를 하나씩만 가져올 수

devyoseph.tistory.com

https://kobalja2020.tistory.com/entry/Java-%EC%9E%90%EB%B0%94-%EA%B8%B0%EB%B3%B8-%EC%9E%85-%EC%B6%9C%EB%A0%A5-Systeminread-%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC

 

Java - 자바 기본 입 출력/ System.in.read(); 에 대하여

오늘은 inputstream에 대하여 찾아보다가 자바 기본 입출력과 System.in.read라는 구문에 대해 확실하게 알기 위하여 공부해보았습니다. ● 자바에서는 기본적으로 ASCII 코드 값이 입력됩니다. 아래의

kobalja2020.tistory.com