Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Developer N

[Java] String 문자열 특정 길이만큼 분할하기 본문

STUDY/JAVA | SPRING

[Java] String 문자열 특정 길이만큼 분할하기

nnh 2023. 6. 1. 10:37
728x90

 

 

db에서 받아온 문자열 값을 특정 길이만큼 잘라서 줄바꿈을 해야하는 경우가 생겼다.

예를 들면 문자열 "가나다라마바사아자차카타파하"을 고정길이 4로 설정하여 자를 경우 아래처럼 4개의 요소로 분할된다.

 

가나다라/마바사아/자차카타/파하

 

이처럼 Java에서 특정 길이만큼 문자열을 분할하는 방법을 알아보자.

 

 

 

1. String 클래스의 substring 메서드

 

String title = "가나다라마바사아자차카타파하";
int maxLen = 4;

int arraySize = (int) Math.ceil((double)title.length() / maxLen);
String[] titleArray = new String[arraySize];

int index = 0;
for(int startIndex = 0; startIndex < title.length(); title += maxLen) {
titleArray[index++] =
        title.substring(startIndex, Math.min(startIndex + maxLen, title.length()));
}

System.out.println(Arrays.toString(titleArray));

// 결과 : ["가나다라", "마바사아", "자차카타", "파하"]

 

분할할 문자열과 분할할 길이값을 변수에 할당해준 다음 for문을 통해 문자열을 분할해서 처리하면 된다.

 

나는 문자열을 분할한 다음 줄바꿈을 해야했고, 수정한 값을 jsp로 넘겨주어 화면에 띄워야했기 때문에 아래와 같이 코드를 수정해서 사용했다.

 

String title = "가나다라마바사아자차카타파하" // 분할할 문자열
int maxLen = 4; // 분할기준 길이

String t = "";
for(int startIndex = 0; startIndex < title.length(); startIndex += maxLen) {
	t+= title.length() > startIndex + maxLen ? title.substring(startIndex, Math.min(startIndex + maxLen, title.length())) + "<br>"
            : title.substring(startIndex, Math.min(startIndex + maxLen, title.length()));
}

System.out.println(t);
// 결과 : 가나다라<br>마바사아<br>자차카타<br>파하

이번에는 배열에 담지 않고 문자열 변수를 새로 만들어 분할한 값을 바로 담아주었다.

대신 줄바꿈을 위해 분할한 문자열 뒤에 "<br>을 추가했고, startIndex + maxLen 값이 title.length() 보다 크거나 같을때 즉, for문 마지막일 때는 "<br>"태그가 들어가지 않도록 조건을 주었다.

 

 

 

 

2. String 클래스의 split 메서드

 

이 메서드를 사용하면 substring을 이용한 방법보다 더 간결하게 작성할 수 있다.

String 클래스의 split 메서드의 첫번째 매개변수로 문자열 또는 문자열로 구성된 정규표현식을 전달할 수 있다.

 

문자열을 특정 길이만큼 분할하기 위해 아래 정규식 패턴을 매개변수로 전달한다.

"(?<=\\G.{" + 특정 길이 + "})"

 

아래는 split과 정규식을 사용하여 분할한 뒤 배열에 담는 예제이다.

public static void main(String args[]) {
  String title = "가나다라마바사아자차카타파하";
  int maxLen = 4;

  String[] titleArray = title.split("(?<=\\G.{" + maxLen + "})");

  System.out.println(Arrays.toString(titleArray));
}

// 결과 : ["가나다라", "마바사아", "자차카타", "파하"]

 

 

 

 

3. 정규표현식(Regex)

 

마지막으로 정규표현식에서 제공하는 Pattern 클래스와 Matcher 클래스를 직접 호출하는 방법이다.

이 방법은 substring()메서드를 사용한 첫번째 방법의 소스 코드를 응용했다.

 

String title = "ABCDEFGHIJK";
int maxLen = 3;

int arraySize = (int) Math.ceil((double)strValue.length() / fixLength);
String[] titleArray = new String[arraySize];

// 정규식 패턴을 전달
Matcher matcher = Pattern.compile(".{1," + maxLen + "}").matcher(title);

int index = 0;
while (matcher.find()) {
titleArray[index++] = title.substring(matcher.start(), matcher.end());
}

System.out.println(Arrays.toString(titleArray));

// 결과 : ["가나다라", "마바사아", "자차카타", "파하"]
728x90
Comments