본문 바로가기

코딩테스트/JAVA

문자열 기초지식 보강

 

프로그래머스의 기초문제를 풀어보며 부족했던 코딩테스트 기초지식을 보강해보려한다.

 

쉽게 풀 수 있는 문제여도 더 빠르고 쉽게 풀 수 있는 방법을 알아야 다른 어려운 문제에서도 시간을 단축시킬 수 있을것같다. 그리고 생각의 틀을 더 확장하고자 한다.

 

모든 문제에 대한 해답을 적진 않고 우선 문자열 부분에서 배울점이 있었던 부분만 정리해놓으려 한다.

 

대문자를 소문자로 변환하는 경우

대문자를 소문자로 소문자를 대문자로 바꾸는 문제들이 많이 나왔는데 나의 기존 풀이는 

소문자 a는 int로 변환할 경우 97의 값을 갖고 (아스키코드)

대문자 A는 int로 변환할 경우 65의 값을 갖는다.

 

따라서 char형의 문자에 숫자를 각각 더하고 빼는 식으로 많이 풀었는데 다음과 같은 방법도 있었다.

 

1. Character.isUpperCase()

문자 값이 대문자 인지 확인

Character.isUpperCase(b)

 

2. Character.toUpperCase()

문자 값을 대문자 변환

Character.toUpperCase(b);

 

3. Character.toLowerCase()

문자 값을 소문자 변환

Character.toLowerCase(b);

 

4. String.toUpperCase()

문자열에 있는 모든 소문자를 대문자로 변환

String str = "aaaaa"
str = str.toUpperCase();

 

5. String.toLowerCase()

문자열에 있는 모든 대문자를 소문자로 변환

String str = "AAAAA"
str = str.toLowerCase();

 

 

 

문자열을 찾는 경우

1. indexOf()

문자열 안에서 특정 문자열이 **어디에 위치하는지(인덱스)**를 반환합니다.

String str = "Hello Java World";
int idx = str.indexOf("Java");
System.out.println(idx);
// 출력: 6
 
  • 존재하면 시작 인덱스를 반환
  • 존재하지 않으면 -1 반환
  • 대소문자를 구분합니다
  • 찾을 시작 위치를 지정할 수도 있습니다.

2. lastIndexOf()

문자열의 뒤에서부터 검색합니다.

 
String str = "banana"; 
int idx = str.lastIndexOf("a"); 
System.out.println(idx); // 출력: 5

3. contains()

문자열 안에 특정 문자열이 포함되어 있는지 여부만 확인합니다.

 
String str = "Hello Java World"; 
boolean hasJava = str.contains("Java"); 
System.out.println(hasJava); // 출력: true
  • 반환 타입은 boolean
  • 내부적으로는 사실상 indexOf(...) != -1 과 동일한 동작
  • 위치 정보는 필요 없고 포함 여부만 확인할 때 적합합니다.

4. startsWith() / endsWith()

문자열이 특정 문자(열)로 시작하거나 끝나는지를 확인할 때 사용합니다.

 
String str = "Hello Java"; 
System.out.println(str.startsWith("Hello")); // true 
System.out.println(str.endsWith("Java")); // true

 

 

메서드 반환 타입 기능 특징

indexOf() int 특정 문자열의 인덱스 반환 없으면 -1
lastIndexOf() int 뒤에서부터 검색 없으면 -1
contains() boolean 포함 여부만 확인 단순 확인용
startsWith() boolean 특정 문자열로 시작하는지 접두어 검사
endsWith() boolean 특정 문자열로 끝나는지 접미어 검사

 

 

문자열을 자르는 경우

1. substring(int start, int end)

시작 인덱스부터 end 직전까지 자른 부분 문자열을 반환합니다.

String str = "Hello Java";
String sub = str.substring(0, 5);
System.out.println(sub); // "Hello"
  • start는 포함, end는 포함되지 않음
  • end를 생략하면 끝까지 자릅니다.
String sub2 = str.substring(6); // "Java"

2. split(String regex)

구분자를 기준으로 문자열을 여러 조각으로 나누어 배열로 반환합니다.

String fruits = "apple,banana,grape";
String[] arr = fruits.split(",");
for (String f : arr) System.out.println(f);

출력:

apple
banana
grape

💡 주의: split()은 정규표현식 기반이라,
.(점), |, * 같은 문자를 쓸 때는 이스케이프(\\) 해야 합니다.

String[] date = "2025.10.14".split("\\.");
// 결과: ["2025", "10", "14"]

 

 

문자열 비교하는 경우

1. equals()

문자열 내용이 같은지 비교 (대소문자 구분)

String a = "Java";
String b = "java";
System.out.println(a.equals(b)); // false

1. equalsIgnoreCase()

대소문자 무시하고 비교

System.out.println(a.equalsIgnoreCase(b)); // true

1. compareTo()

문자열을 사전순(lexicographical order) 으로 비교
같으면 0, 앞이 작으면 음수, 뒤가 크면 양수 반환

System.out.println("apple".compareTo("banana")); // -1 (apple < banana)
System.out.println("cat".compareTo("car")); // 1 (t > r)

 

문자열 바꾸기

1. replace()

특정 문자열을 다른 문자열로 바꿉니다.

String str = "Hello Java";
System.out.println(str.replace("Java", "World")); // "Hello World"

1. replaceAll()

정규표현식으로 치환 (예: 공백 제거 등)

String text = "Hello   World";
System.out.println(text.replaceAll("\\s+", " ")); // "Hello World"

문자열 다루기 유용한 메서드들

메서드 설명 예시

length() 문자열 길이 "hello".length() → 5
charAt(i) 특정 위치의 문자 "java".charAt(2) → 'v'
toUpperCase() 대문자로 "java".toUpperCase() → "JAVA"
toLowerCase() 소문자로 "JAVA".toLowerCase() → "java"
trim() 앞뒤 공백 제거 " hello ".trim() → "hello"
isEmpty() 빈 문자열 여부 확인 "".isEmpty() → true
String.valueOf() 숫자 → 문자열 변환 String.valueOf(123) → "123"
Integer.parseInt() 문자열 → 숫자 변환 Integer.parseInt("123") → 123

Tip: 문자열은 불변(Immutable)

자바의 String은 변경할 수 없는(immutable) 객체입니다.
replace, substring 등을 쓰면 새로운 문자열 객체가 만들어져요.

그래서 반복적으로 문자열을 붙일 때는 StringBuilder를 사용합니다.

StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" ");
sb.append("World");
System.out.println(sb.toString()); // "Hello World"