[Java] 문자열 처리

ungnam·5일 전

기본

1. String ↔ char[]

String s = "abc";
char[] arr = s.toCharArray();
String t = new String(arr);

2. 문자열 찾기

String s = "abcabcdef";
s.contains("abc");	// true
s.startsWith("ab");	// true
s.endsWith("yz");	// false

int idx = s.indexOf("abc");		 // 0
int last = s.lastIndexOf("abc"); // 3

만약 못 찾으면? -1

3. StringBuilder

문자열을 반복해서 조작한다면 그냥 이거 쓰자.
그냥 String은 불변이라 매번 새 객체를 만들 가능성이 커서 비효율적이다.

StringBuilder sb = new StringBuilder();
sb.append("abc");
sb.append(123);
sb.append('x');
String res = sb.toString(); // abc123x

삭제, 삽입

sb.deleteCharAt(i);
sb.delete(l, r);
sb.insert(i, "abc");

뒤집기, 특정 문자

sb.reverse();
sb.charAt(i);
sb.setCharAt(i, 'x');

불변인 문자열은 수정이 안되는데 StringBuilder는 setCharAt()으로 가능하다.

4. 문자열 자르기

String s = "a,b,c";
String[] parts = s.split(",");

단, 정규식이기 때문에 . | + * ? ( ) [ ] { } ^ $는 예상과 다른 결과가 나올 수 있음에 유의

그럴 때는 아래처럼 escape 처리해준다.

String s = "a.b.c";
String[] parts = s.split("\\.");

5. 숫자 ↔ 문자열

int x = Integer.parseInt("123");
String s1 = String.valueOf(123);

활용

1. 회문 검사

boolean palindrome = true;
for (int l=0, r=s.length()-1; l<r; l++, r--) {
	if (s.charAt(l) != s.charAt(r)) {
    	palindrome = false;
        break;
    }
}

StringBuilder.reverse() 써도 된다.

2. 애너그램 판별

char[] a1 = a.toCharArray();
char[] a2 = b.toCharArray();
Arrays.sort(a1);
Arrays.sort(a2);
boolean same = Arrays.equals(a1, a2);
profile
꾸준함을 잃지 말자.

0개의 댓글