JAVA

Java 과제

룸훼훼 2010. 8. 22. 16:10
반응형
1. 대소문자 바꿔 출력

package String1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class String1_1 {
 public static void main(String[] args)throws IOException {
  // TODO Auto-generated method stub
  System.out.print("바꾸문자 입력 : ");
  BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); //문자를 버퍼로
  
  char[] ch = in.readLine().toCharArray();//배열로 저장
 
 
  System.out.print("바뀐문자열 : ");
 
 
  for(int i = 0; i < ch.length; i++){
  
   if(ch[i] >= 'a' && ch[i] <= 'z')
    ch[i] -= 32;
  
   else if(ch[i] >= 'A' && ch[i] <= 'Z')
    ch[i] +=32;
 
    
    System.out.print(ch[i]);
   }
 }
}




BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
에서, 먼저, System.in 부분 부터 설명한다,
System.in은 키보드와 같은 사용자로부터 입력을 받는 표준입력스트림 객체를 나타낸다. 그래서, System.in의 리턴값은 InputStream이되는 것이다.
그리고, InputStream은 입력스트림으로 부터,데이터를 byte단위로 읽어오는 byte stream이다. 
그다음, InputStreamReader는 인자로, InputStream을 취해서,Reader 스트림형태로 변환합니다. 변환시, 문자열인코딩을 줄수도있다. 그럼, Reader스트림이란, InputStream과는 달리, 입력스트림에서, 데이터를 character단위로,처리한다.
이제, BufferedReader란?
BufferedReader는 인자로 취한 Reader 스트림에 버퍼링기능을 추가한 입력스트림 클래스 이다.
버퍼를 둠으로써, 파일,네트워크와 같은 물리적인 장치에서 데이터를 사용자가 요청할때마다 매번 읽어오는것보단, 일정량사이즈로 한번에 읽어온후, 버퍼에 보관, 그리고, 사용자가 요구시,버퍼에서 읽어오게된다. 결국, 속도를 향상시키고, 시간의 부하를 줄일수 있게 된단다.
그리고, 사용자가 사용하기 편리한, readLine()과 같이 한줄씩읽어오는 메소드를 제공한다
결국, BufferedReader을 사용하기위해서, 계속해서, 스트림을 wrap 한것입니다.  

덧붙여서, stream이란  자바에서, 데이터 입출력시, 전송되는 데이터의 흐름을 말한다. 간단히 설명하면, 자바에서 데이터 입출력시, 시스템을 사용한 직접적인 작업은 JVM과 JVM에의해 제공되는 라이브러리들에 의해서 처리되고, 사용자는 단지 스트림통해서, 데이터를 송신하거나 수신하기만 하면된다. 그래서, (데이터를 받는) 입력시, InputStream이란것을 이용한것입니다. InputStream 안쪽 작업은 자바가 구현해주는 것이다

결국.

System.in으로 read했을때 문자 단위가 아니라 한바이트 단위로 핸들링함.
자바에서 문자는 2바이트 임으로 문자를 읽어들일수 없다.?
이럴때 inputStreamReader를 사용하면 문자 핸들이 가능하다
여기에 BufferedReader를 쓰면 한줄단위로 데이터를 읽어 들일수 있다.


결론-
BufferedReader in  = new BufferedReader (new inputStreamReader(System.in));

닥치고 쓰자





2번. hello 의 o를 z로 변경하기



package String1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class String1_1 {
 public static void main(String[] args)throws IOException {
  // TODO Auto-generated method stub
  System.out.print("바꿀문자 입력 : ");
  BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); //문자를 버퍼로
  
  char[] ch = in.readLine().toCharArray();//배열로 저장
 
 
  System.out.print("바뀐문자열 : ");
 
 
  for(int i = 0; i < ch.length; i++){
  
   if(ch[i] >= 'o')
    ch[i] = 'z';
  
  
    
    System.out.print(ch[i]);
   }
 }
}





3번 앞뒤문자 바꿔줄력

//앞뒤변경

package String1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class String1_1 {
 public static void main(String[] args)throws IOException {
  // TODO Auto-generated method stub

  System.out.print("바꿀문자 입력 : ");

  BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); //문자를 버퍼로

  
  char[] ch = in.readLine().toCharArray();//배열로 저장
 
 
  System.out.print("바뀐문자열 : ");
 
 
    for(int i = ch.length-1;  i >= 0; i--) {
    
    System.out.print(ch[i]);
   }
 }
}





반응형