[TIL] 문자열 처리

yujamint·2022년 6월 26일
0

PS

목록 보기
2/9

인프런에서 김태원 강사님의 '자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비' 강의를 들으며 추가적으로 공부할 필요성이 느껴지는 부분을 정리하려 한다.

이 글에서는 해당 강의의 섹션1, 문자열 부분을 다 듣고 공부한 부분을 전체적으로 정리한다.


아스키 코드(ASCII CODE)

다음은 아스키 코드표이다.
아스키 코드

아스키 코드란 컴퓨터가 문자를 숫자로 표현하는 방식으로 0부터 127까지의 숫자를 이용하여 문자를 표현한다.
아스키 코드를 이용해 대,소문자 변환 등 문자열을 처리할 때 유용하게 사용할 수 있다. 예시는 아래 코드와 같다.

System.out.println((char) 66); // 'B' 출력
System.out.println((char) ('B' + 32)) // 'b' 출력

숫자 : 48~57 (0~9)
알파벳(대문자) : 65~90 (A~Z)
알파벳(소문자) : 97~122 (a~z) // 대문자 + 32

위는 알파벳과 숫자의 아스키 코드 값이다. 알고 있는 것이 도움된다고 생각한다.

특정 문자 포함 여부 검사

문자열에 특정 문자가 포함되어 있는지 확인하기 위해서 다음 3가지 메소드를 사용할 수 있다.

  • contains()
  • indexOf()
  • matches()

위 3가지 메소드는 모두 String 클래스에서 제공하는 메소드다.

1. contains()

public boolean contains(CharSequence s)

인자로 입력받은 s를 문자열이 포함하고 있는지 여부(boolean)를 리턴한다.
즉, 문자열이 포함되어 있다면 true를 리턴하고, 포함되어 있지 않다면 false를 리턴한다.

String str = "db_jam";
System.out.println(str.contains("db")); // true 리턴
System.out.println(str.contains("jam")); // true 리턴
System.out.println(str.contains("yu")); // false 리턴

2. indexOf()

public int indexOf(int ch)
public int indexOf(int ch, int fromIndex)
public int indexOf(String str)
public int indexOf(String str, int fromIndex) // fromIndex부터 찾는다.

indexOf() 메소드는 파라미터로 입력받은 문자,문자열이 원본 문자열에서 처음 나타나는 index를 찾아서 index 위치를 리턴한다.
원본 문자열에 찾으려는 문자,문자열이 없으면 -1을 리턴한다.

String str = "db_jam";

//indexOf(String str)
System.out.println(str.indexOf("db")); // 0 출력
System.out.println(str.indexOf("jam")); // 3 출력
System.out.println(str.indexOf("_")); // 2 출력

//indexOf(String str, int fromIndex)
System.out.println(str.indexOf("_",2)); // 2 출력
System.out.println(str.indexOf("_",3)); // -1 출력

3. matches()

public boolean matches(String regex)

문자열에 정규식과 일치하는 부분이 있는지 체크하는 메소드이다. 파라미터를 정규식으로 받는다는 부분에서 위 2개 메소드와 차이를 갖는다.
포함되어 있다면 true, 포함되어 있지 않다면 false 리턴

String str = "db_jam";
System.out.println(str.matches("db")); // false 리턴
System.out.println(str.matches("(.*)db(.*)")); // true 리턴

위 코드에서 볼 수 있듯이 "db"를 파라미터로 입력하면 false를 리턴한다. 이 경우에는 문자열이 정확히 "db"여야만, 결과가 true가 된다.
"(.*)db(.*)" 이 정규식은 "db"라는 문자열이 한 번이라도 나오는지 체크하는 정규식이고, true를 리턴한다.

matches() 메소드는 정규식을 사용해야 해서 까다롭지만, 문자열에서 특정 패턴을 찾아야 할 때는 매우 유용하다.

문자열 자르기

문자열을 자르기 위해서 다음 2가지 메소드를 사용할 수 있다.

  • substring()
  • split()

1.substring()

//사용법
String.substring(int start) // 1 
String.substring(int start, int end) // 2

인자를 start 한 개만 받는 경우는 해당 index부터 문자열의 끝까지 자른다.
인자를 start와 end 두 개를 받는 경우 start 인덱스부터 end 인덱스 전까지 문자열을 자른다.

String str = "db_jam";
System.out.println(str.substring(0,2)); // 'db' 출력
System.out.println(str.substring(2,3)); // '_' 출력
System.out.println(str.substring(3)); // 'jam' 출력

2.split()

특정문자를 기준으로 문자열을 잘라서 배열에 넣어주는 메소드이다.

String str = "db_jam";
String[] strs = str.split("_");
for(int i=0; i< strs.length; i++)
    System.out.println(strs[i]);

위 코드는 "_" 문자를 기준으로 "db_jam"을 잘라서 배열에 넣는다. 결과적으로 strs[0] = "db" , strs[1] = "jam"이 된다.
출력결과 역시 첫 번째로 "db"를 출력하고 , 그 다음으로 "jam"을 출력한다.

그 외 새롭게 알게 된 메소드

Character 클래스
isAlphabetic()
해당 문자가 알파벳(소문자,대분자 구분X)인지 검사한다.

System.out.println(Character.isAlphabetic('c')); // true 출력
System.out.println(Character.isAlphabetic('9')); // false 출력

isLowerCase() / isUpperCase()
해당 문자가 대문자 또는 소문자인지 검사한다.

System.out.println(Character.isLowerCase('c')); // true 출력
System.out.println(Character.isLowerCase('B')); // false 출력
System.out.println(Character.isUpperCase('C')); // true 출력
System.out.println(Character.isUpperCase('d')); // false 출력

StringBuffer 클래스
reverse()
문자열을 뒤집는 메소드 ex) "abcde" -> "edcba"

String str = "abcde";
StringBuffer sb = new StringBuffer(str);
String reversedStr = sb.reverse().toString();
System.out.println(reversedStr); // edcba 출력

공부하며 참고한 자료(블로그)

https://stepbystep1.tistory.com/10 / 아스키코드
https://hianna.tistory.com/539 / 문자 포함 여부 검사
https://byul91oh.tistory.com/309 / 문자열 자르기
https://jamesdreaming.tistory.com/158 / isUpperCase()
https://jamesdreaming.tistory.com/159 / isLowerCase()
https://yangbox.tistory.com/59 / 문자열 뒤집기


profile
개발 기록

0개의 댓글