Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 문자열을 N등분으로 나누는 방법

이 글에서는 문자열(String)을 N개의 동일한 부분으로 나누는 방법을 자세히 알아봅니다. 문자열은 하나 이상의 문자를 포함하고 큰따옴표(" ")로 감싸 표현하는 자료형으로, Java 프로그래밍에서 가장 많이 다루는 데이터 타입 중 하나입니다.

문제 정의

예를 들어 "Java Program is fun!"이라는 문자열(길이 20)을 4등분한다면, 각 부분은 정확히 5글자씩 구성되어야 합니다.

입력 예시:

입력 문자열: Java Program is fun!

기대 출력:

문자열의 길이: 20
4등분 결과:
Java
Progr
am is
fun!

해결 알고리즘

1단계 - 시작
2단계 - 문자열 input_string과 정수 string_length, N을 선언한다.
3단계 - 변수에 값을 할당한다.
4단계 - 임시 변수 temp를 0으로 초기화한다.
5단계 - 문자열 길이를 N으로 나누어 한 부분의 크기를 계산한다.
6단계 - 문자열 길이가 N으로 나누어 떨어지지 않으면 안내 메시지를 출력한다.
        나누어 떨어지는 경우 문자열 전체를 순회한다.
7단계 - 매 반복마다 substring()으로 해당 범위의 부분 문자열을 추출해 배열에 저장한다.
8단계 - 반복이 진행될 때마다 temp를 증가시킨다.
9단계 - 분할된 N개의 부분을 콘솔에 출력한다.
10단계 - 종료

핵심 포인트

  • 문자열 길이가 N으로 나누어떨어지지 않으면 동일한 크기로 분할할 수 없으므로, 먼저 나머지 연산(%)으로 검증해야 합니다.
  • substring(start, end) 메서드는 start 인덱스부터 end 인덱스 직전까지의 문자를 추출합니다.
  • for 루프의 증가식을 i = i + string_parts로 작성하면 한 번에 한 부분씩 건너뛰며 추출할 수 있습니다.

예제 1: main 함수 하나로 구현하기

첫 번째 방식은 모든 로직을 main 함수 안에 직접 작성하는 절차적 스타일입니다.

public class Demo {
    public static void main(String[] args) {
        String input_string = "Java Program is fun!";
        System.out.println("정의된 문자열: " + input_string);
        int string_length = input_string.length();
        System.out.println("문자열의 길이: " + string_length);
        int N = 4;
        int temp = 0, string_parts = string_length / N;
        String[] equalStr = new String[N];
        if (string_length % N != 0) {
            System.out.println("문자열을 " + N + "등분할 수 없습니다.");
        } else {
            for (int i = 0; i < string_length; i = i + string_parts) {
                String part = input_string.substring(i, i + string_parts);
                equalStr[temp] = part;
                temp++;
            }
            System.out.println(N + "등분 결과:");
            for (int i = 0; i < equalStr.length; i++) {
                System.out.println(equalStr[i]);
            }
        }
    }
}

실행 결과

정의된 문자열: Java Program is fun!
문자열의 길이: 20
4등분 결과:
Java
Progr
am is
fun!

예제 2: 객체 지향 방식으로 구현하기

두 번째 방식은 분할 로직을 별도의 메서드로 분리하여 객체 지향 프로그래밍(OOP) 원칙에 맞게 재사용성을 높였습니다. 코드가 더 깔끔하고 유지보수가 쉬워집니다.

public class Demo {
    static void divide_string(String input_string, int N) {
        int string_length = input_string.length();
        System.out.println("문자열의 길이: " + string_length);
        int temp = 0, string_parts = string_length / N;
        String[] equalStr = new String[N];
        if (string_length % N != 0) {
            System.out.println("문자열을 " + N + "등분할 수 없습니다.");
        } else {
            for (int i = 0; i < string_length; i = i + string_parts) {
                String part = input_string.substring(i, i + string_parts);
                equalStr[temp] = part;
                temp++;
            }
            System.out.println(N + "등분 결과:");
            for (int i = 0; i < equalStr.length; i++) {
                System.out.println(equalStr[i]);
            }
        }
    }
    public static void main(String[] args) {
        String input_string = "Java Program is fun!";
        System.out.println("정의된 문자열: " + input_string);
        int N = 4;
        divide_string(input_string, N);
    }
}

실행 결과

정의된 문자열: Java Program is fun!
문자열의 길이: 20
4등분 결과:
Java
Progr
am is
fun!

마무리

이처럼 length(), substring(), 나머지 연산만 활용하면 문자열을 원하는 개수만큼 균등하게 나눌 수 있습니다. 실무에서는 대용량 텍스트를 청크(chunk) 단위로 처리하거나 데이터를 일정 크기로 분배할 때 이 패턴이 자주 사용됩니다. 문자열 길이가 N으로 나누어떨어지지 않는 경우에는 마지막 조각이 짧아지도록 허용하는 등 요구 사항에 맞게 예외 처리를 확장해 보세요.