본문 바로가기

JAVA

[JAVA] String 문자열 자르기. 일정 글자수 만큼 잘라서 사용하는 방법 (substring 함수)

어떤 경우에 사용했나?

특정글자에 대한 형태소분석 결과를 뽑아내는 로직을 개발중이었습니다. 

형태소분석기 API를 활용하는데 한번에 처리할 수 있는 글자수가 만글자 이내로 정해져있었습니다.  

StringBuffer에 담은 글자들을 형태소분석기 API에 보내기 전에 만글자가 넘는지 체크를 하고, 만글자가 넘으면 글자수를 나누어서 형태소분석기 API에 보내야 하는 상황이었습니다. 

 

처리결과

//실제 text값은 훨씬 깁니다.
String text = "엑소브레인은 내 몸 바깥에 있는 인공 두뇌라는 뜻으로, 세계 최고인공지능 기술 선도라는
비전을 달성하기 위한 과학기술정보통신부 소프트웨어 분야의 국가 혁신기술 개발형 연구개발 과제이다.";

List<NameEntity> entityList = new ArrayList<>();

int maxLength = 10000;
int textLen = text.length();
int loopCnt = textLen / maxLength + 1;

String rssTitles = ""; 
for (int i = 0; i < loopCnt; i++) {

  int lastIndex = (i + 1) * maxLength; 
  
  //글자길이보다 긴 lastIndex를 설정하면 StringIndexOutOfBoundsException 오류가 발생하므로 if문으로 분기
  if(textLen > lastIndex){
    rssTitles = text.substring(i * maxLength, lastIndex);
  }else{
    rssTitles = text.substring(i * maxLength);
  }

  //형태소 분석 결과를 LIST 객체에 계속 저장
  entityList.addAll(apiWiseEntityList(rssTitles));
}

동적으로 substring의 인자값을 설정하도록 코딩한 부분이 주요 로직입니다.

그리고, 글자길이보다 큰 index값을 사용하면 String index out of range 에러가 발생하므로 if문으로 적절하게 분기를 태워야 하고요.

 

주요 사용함수

String.substring(int beginIndex) : 시작 위치(맨 처음은 0)로부터 String 마지막까지 잘라서 리턴.

String.substring(int beginIndex, int lastIndex) : 시작위치 부터 마지막 위치까지 잘라서 리턴