본문 바로가기
Baeldung번역&공부/Java-string

문자열 순회 방법들(How to Iterate Over the String Characters in Java)

by ms727 2025. 1. 27.

원본 글: https://www.baeldung.com/java-iterate-string-characters

 

시간복잡도와 공간복잡도를 고려하여 String 문자열을 어떻게 반복접근하나 확인해봅시다.

 

 

1. Common Ways to Iterate Over a String

Java에서 문자열을 반복접근하기위해 여러 방법들이 있는데, 각 프로그램의 요구사항에 따라 여러 방법중 하나를 골라 쓰면 될 것같습니다.

 

1.1 for Loop

for문을 통하여 문자열을 반복 접근할 수 있습니다.

n의 크기를 가진 문자열을 돌려면 당연히 n번만큼 접근해야하고 접근하여 저장할 단일 변수만 필요하기에 시간복잡도와 공간복잡도는 다음과 같습니다.

- 시간복잡도: O(n)

- 공간복잡도: O(1)

    @Test
    public void forLoopTest() {
        String str = "hello minseok";

        for(int i=0; i<str.length(); i++){
            System.out.printf("%c", str.charAt(i));
        }
    }

 

1.2 toCharArray()

해당 메서드는 문자열을 반복할 수 있는 char 배열로 바꿔버립니다.

저장할 char배열이 필요하기에 시간복잡도와 공간복잡도는 다음과 같습니다.

- 시간복잡도: O(n)

- 공간복잡도: O(n)

 

    @Test
    public void toCharArrayTest() {
        String str = "hello minseok";
        for(char c : str.toCharArray()) {
            System.out.printf("%c", c);
        }
    }

 

1.3 Java 8 Stream

Java8에서 제공되는 Streams를 통하여 문자열을 돌 수 있습니다.

순차로 돌기에 시간복잡도는 O(n)이지만 공간복잡도는 배열을 돌면서 어떤 작업을 수행하느냐에 따라 바뀔 수 있습니다.

- 시간복잡도: O(n)

- 공간복잡도: ??

 

    @Test
    public void streamTest() {
        String str = "hello minseok";
        str.chars().forEach( c-> {
            System.out.print((char) c);
        });
    }

 

int형으로 반환되기에 char로 강제형변환을 시켜줬습니다.

 

1.4 CharacterIterator

먼저 코드를 보는게 이해가 편합니다.

    @Test
    public void characterIteratorTest() {
        String str = "hello minseok";
        CharacterIterator ci = new StringCharacterIterator(str);
        while (ci.current() != CharacterIterator.DONE) {
            System.out.printf("%c", ci.current());
            ci.next();
        }
    }

 

 

 

CharacterIterator라는 인터페이스를 통하여 StringCharcterIterator를 구현합니다.

해당 인터페이스에는 getBeginIndex(), getEndIndex()등 다양한 접근 메서드를 지원하는데, 위에 사용한 메서드는 다음과 같습니다.

 

- current(): 현재 문자를 반환합니다.

- next(): 다음 인덱스로 이동합니다.

 

하나의 인덱스에 대한 정보만 필요하고 순차접근을 하므로 시간복잡도와 공간복잡도는 다음과 같습니다.

- 시간복잡도: O(n)

- 공간복잡도: O(1)

 

2. 결론

본문 글: The best method to use depends on our specific use case. For most cases, the simple for loop or the enhanced for loop is the most straightforward and efficient way to iterate over characters in a string. They have a low space complexity and a time complexity of O(n), which is the best we can achieve for this task.

 

 

=> 시간복잡도와 공간복잡도가 낮은 forLoop 또는 향상된 forLoop(CharacterIterator)를 사용하라.