Java/문자열

[Java]특정 길이만큼 문자열 자르기

DevStory 2022. 8. 18.

특정 길이만큼 문자열 자르기

Java에서 특정 길이만큼 문자열을 잘라야 하는 경우가 존재할 수 있습니다.

 

예를 들어, 문자열 "ABCDEFGHIJK"를 고정 길이 3으로 설정하여 자르는 경우 4개의 요소로 분할됩니다.

ABC, DEF, GHI, JK

이번 포스팅은 Java에서 특정 길이만큼 문자열을 자르는 몇 가지 방법을 소개합니다.


방법 1. String 클래스의 substring 메서드

String 클래스의 substring 메서드와 Math 클래스에서 제공하는 몇 가지 기능을 사용하여 특정 길이만큼 문자열을 자를 수 있습니다.

 

먼저, 분할된 요소를 배열에 할당해야 하므로 문자열 배열을 선언해야 합니다.

 

문자열 배열의 크기는 (문자열의 길이 / 특정 길이)를 올림 한 값으로 설정합니다.

 

예를 들어, 문자열의 길이가 11이고 특정 길이가 3인 경우 배열의 크기는 4입니다.

 

이제, 문자열을 순회하여 특정 길이만큼 분할된 문자열을 배열에 할당합니다.

public static void main(String args[]) {
  String strValue = "ABCDEFGHIJK";
  int fixLength = 3;

  // 배열의 크기를 구합니다.
  int strArraySize = (int) Math.ceil((double)strValue.length() / fixLength);

  // 배열을 선언합니다.
  String[] subStringArray = new String[strArraySize];

  // 문자열을 순회하여 특정 길이만큼 분할된 문자열을 배열에 할당합니다.
  int index = 0;
  for(int startIndex = 0; startIndex < strValue.length(); startIndex += fixLength) {
    subStringArray[index++] =
            strValue.substring(startIndex, Math.min(startIndex + fixLength, strValue.length()));
  }

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

[실행 결과]

[ABC, DEF, GHI, JK]

방법 2. String 클래스의 split 메서드

String 클래스의 split() 메서드를 사용한다면, 첫 번째 방법에서 작성한 코드를 간결하게 작성할 수 있습니다.

 

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

 

문자열을 특정 길이만큼 분할하기 위해 다음 정규식 패턴을 split() 메서드에 전달합니다.

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

다음 예제는 문자열 "ABCDEFGHIJK"를 고정 길이 3으로 분할합니다.

public static void main(String args[]) {
  String strValue = "ABCDEFGHIJK";
  int fixLength = 3;

  String[] subStringArray = strValue.split("(?<=\\G.{" + fixLength + "})");

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

[실행 결과]

[ABC, DEF, GHI, JK]

방법 3. 정규표현식(Regex)

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

 

이 방법은 substring() 메서드를 사용하는 첫 번째 방법의 소스 코드를 응용합니다.

public static void main(String args[]) {
  String strValue = "ABCDEFGHIJK";
  int fixLength = 3;

  // 배열을 생성합니다.
  int strArraySize = (int) Math.ceil((double)strValue.length() / fixLength);
  String[] subStringArray = new String[strArraySize];
 
  // 정규식 패턴을 전달합니다.
  Matcher matcher = Pattern.compile(".{1," + fixLength + "}").matcher(strValue);
 
  int index = 0;
  while (matcher.find()) {
    subStringArray[index++] = strValue.substring(matcher.start(), matcher.end());
  }

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

[실행 결과]

[ABC, DEF, GHI, JK]
반응형

댓글