Java

[Java] 기초 문법 데이터 입력 및 형 변환, indexOf

Rachel_ 2022. 2. 7. 15:02

개인적으로 공부를 갓 시작한 입장에서 알고리즘 문제를 풀다보면 가장 답답한 것은 구조를 만드는 것보다 데이터를 입력하고, 형을 변환하는 과정이다. 이번 포스팅은 형 변환에 관련된 메소드를 모두 정리해볼 예정이다.

 

또한 백준을 위주로 풀다보니 bufferReader 를 주로 이용하게 되는데, 이것과 관련된 메소드들도 정리해보려 한다.

 

1. BufferedReader() 와 연결되는 주요 메소드

 

주요 Method

 

1-1) int read()

: 스트림으로부터 한 문자를 읽어서 int형으로 리턴 ('3' -> (int)'3' -> 51)

// 여기서 51이 나오는 이유는 ASCII 코드에 의거한 숫자 코드가 등장하게 된다.

 

1-2) int read(char[] buf)

: 스트림으로부터 buf의 크기만큼 문자를 읽음. 문자 수 리턴

 

1-3) int read(char[] buf, int offset, int length)

: 스트림으로부터 buf의 offset 위치에서부터 length 길이만큼 문자를 읽어들임

 

2) String readLine()

: 스트림으로부터 한 줄을 읽어 문자열로 리턴

// 만약, 한 줄에 띄어쓰기나 '#' 등의 기호를 기준으로 여러 데이터가 쓰여져 있다면,

StringTokenizer st = new StringTokenizer(br.readline, " ") 과 같은 메소드를 사용하여 구분지어 줘야 한다.

 

3-1) void mark()

: 스트림의 현재위치를 마킹, 차후 reset() 이용하여 마킹위치부터 시작

 

3-2) void reset()

: 마킹이 있으면 그 위치부터, 없으면 처음부터 다시 시작

 

4) long skip(int n)

: n개의 문자를 건너 뜀

 

문자 -> 숫자 치환

1. String to int

String s = "10";
int i_1 = Integer.parseInt(s);
int i_2 = Integer.valueOf(s);

2. String to Double, Float

String s = "10";
int d = Double.valueOf(s);
int f = Float.valueOf(s);

3. String to Long, short

String s = "10";
long l = Long.parseLong(s);
short sh = Short.parseShort(s);

정수에 해당하는 데이터 형에는 데이터명(Integer / Long / Short).parse데이터명(Int / Long / Short) 으로 사용한다.

실수에 해당하는 데이터 형에는 valueOf 라는 형태를 쓴다.

 

 

숫자 -> 문자

1. int to String / Double to Stirng / Float to String 

int i = 10;
double d = 10;
float f = 10;
Stirng s;

s = String.valueOf(i); // d // f //
s = String.toString(i); // d // f //
s = ""+i;

즉 숫자 데이터에서 String으로 치환할 때에는 valueOf // toString 두 가지 방법을 사용합니다.

다만 int 형에 대해서는 ""+i 라는 형태로 치환이 가능해진다.

이 중 toString() 이라는 메소드는 일종의 오버라이드 형태를 지닌 메소드이다.

 

정수 <--> 실수

실수가 정수로 치환될 때에는 데이터의 유형이 작아지게 된다. 따라서 정상적인 방법으로 변환하는게 아니라 강제적으로 데이터 형을 변환하는 형태가 된다.

double d_num = 10.101010;
float f_num = 10.1010

int i_num;
i_num = (int)d_num; --Double-> Int
i_num = (int)f_num; --Float -> Int

 

정수가 실수로 치환될 때 역시 형태는 비슷하다.

int i_num = 10;
	
double d_num = (double)i_num; --Int -> Double
float f_num = (float)i_num; --Int -> Float

 

indexOf

indexOf 는 특정 문자나 문자열이 앞에서부터 처음 발견되는 인덱스를 반환한다. 만약 해당 문자나 문자열을 찾지 못했을 경우에는 "-1" 을 반환합니다.

public class IndexOfTest{ 
    public static void main(String[] args){ 
        String indexOfOne = "Hello world"; 
        String indexOfTwo = "     Hello world     "; 
        System.out.println( indexOfOne.indexOf("o") ); // 4 
        System.out.println( indexOfOne.indexOf("x") ); // -1 
        System.out.println( indexOfOne.indexOf("o",5) ); // 7 
        System.out.println( indexOfTwo.indexOf("o") ); // 13 
        System.out.println( indexOfTwo.indexOf("el") ); // 10 
    } 
}

.indexOf("찾을 특정 문자", [시작할 위치] ) 형태로 사용하게 된다. 

시작할 위치의 경우, 생각이 가능하며, 디폴트 값은 0번째, 처음부터 찾게 된다.

 

3번째 예시에서, "o"를 5번째 인덱스부터 찾는다는 것은, "Hello World" 라는 문자열 중 H를 0번째로 기준삼았을 때 5번째 글자인 " "에서부터 "o"을 찾기 시작한다는 의미이다.

 

.lastIndexOf("찾을 특정 문자", [시작할 위치] ) 의 형태로 사용한다.

lastIndexOf 의 경우에는 가장 마지막 문자부터 문자를 찾게 된다.

System.out.println(indexOfone.lastIndexOf("o");

라고 입력한다면, Hello W'o'rld, 즉 뒤에서부터 가장 먼저 눈에 들어오는 o의 위치가 출력될 것이다.

다만 출력 위치는 왼쪽에서부터 세기 시작하여, h를 0 기준으로 하였을 때 7이 출력된다.