이 글에서는 문자열(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으로 나누어떨어지지 않는 경우에는 마지막 조각이 짧아지도록 허용하는 등 요구 사항에 맞게 예외 처리를 확장해 보세요.