-
[Java]자바 입출력(스캐너(Scanner), BufferedReader)Android/Java 2023. 3. 19. 15:19반응형
[모든 포스팅은 개인적 공부를 위해 작성된 글입니다]
- 자바 입출력 방법에는 대표적으로 Scanner와 BufferedReader가 있음
<1. Scanner>
public class Main { public static void main(String[] args) { Scanner sc =new Scanner(System.in); int A = sc.nextInt(); int B = sc.nextInt(); System.out.print(A+B); sc.close();//한 번 close 후에는 다시 Scanner 사용 불가 }//main }
- 입출력 시 리소스를 많이 사용하여 성능 부하를 초래하므로 BufferedReader에 비해 매우 느림
- close() 하지 않아도 GC에 의해 자동으로 메모리 정리되지만, GC 실행 전까지는 메모리 유지되기 때문에 최적화 관점에서는 close() 해주는 것이 좋음
<2. BufferedReader>
(예제 백준 1000번)
public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); StringTokenizer st = new StringTokenizer(str, " "); int A = Integer.parseInt(st.nextToken());//BuffferedReader는 String으로 입력받기 때문에 Integer로 전환 int B = Integer.parseInt(st.nextToken()); System.out.print(A+B); br.close(); }//main }
- 데이터를 하나씩 입력하는 것이 아니라 한번에 입력하므로 속도 빠름(필자는 Scanner보다 BufferedReader 선호)
- 입출력이나 데이터 많은 경우 지향하는 방식
- BufferedWriter나 BufferedReader는 String의 형태로만 입출력 가능
- IOException 예외처리 반드시 해줘야 함(throws IOException)
- StringTokenizer : 특정 문자를 기준으로 문자열을 분리하는 클래스
- StringTokenizer st = new StringTokenizer(문자열); -> 띄어쓰기를 기준으로 문자열 분리
- StringTokenizer st = new StringTokenizer(문자열, 구분자); -> 구분자(특정 문자)를 기준으로 문자열 분리
- StringTokenizer st = new StringTokenizer(문자열, 구분자, true/false);
-> 구분자를 기준으로 문자열 분리
-> 구분자도 토큰으로 넣을지(true), 분리된 문자열 토큰에 포함 안 시킬지(false/디폴트)
- 분리된 문자열은 nextToken()으로 확인 가능
- split과 StringTokenizer의 차이
- split은 나눈 문자열을 배열 형태로 반환하고 StringTokenizer는 문자열 형태로 반환
- String[] mobNum = str.split("-"); String ret1 = mobNum[0]; String ret2 = mobNum[1];
- String str = "010-12-34-56-78";인 경우
String[] arr = str.split("-");로 하는 경우 arr[0]~arr[4]까지 생성
String[] arr = str.split("-", 2);로 하는 경우 여기서 2는 생성되는 배열의 크기를 2까지로 한정시키겠다는 의미로
arr[0] = 010, arr[1] = 12-34-56-78이 됨
String[] arr = str.split("-", 4)로 하는 경우 arr[0] = 010, arr[1] = 12, arr[2] = 34, arr[3] = 56-78이 됨
- 공백도 arr에 포함되므로 공백 제외하고 카운트 하고 싶은 경우 arr[i].equals("")이면 continue하게 처리해줘야 함!!반응형'Android > Java' 카테고리의 다른 글
[Java]Map (0) 2023.03.20 [Java]Optional (0) 2023.03.20 [Android/Java] visibility invisible, gone 차이 (0) 2022.06.06 [Android/Java] 다이얼로그와 액티비티 생명 주기 (0) 2022.06.05 [Android/Java] SQLite BitmapFactory.decodeByteArray return null (0) 2022.06.05