[Java] 기초 문법 데이터 입력 및 형 변환, indexOf
개인적으로 공부를 갓 시작한 입장에서 알고리즘 문제를 풀다보면 가장 답답한 것은 구조를 만드는 것보다 데이터를 입력하고, 형을 변환하는 과정이다. 이번 포스팅은 형 변환에 관련된 메소드를 모두 정리해볼 예정이다.
또한 백준을 위주로 풀다보니 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이 출력된다.