생각보다 상당히 많이 쓰는 함수 중 하나는, java의 substring 함수입니다. 어떻게 쓰는 것인지 봅시다.

 

 

String substring(int s);

String substring(int s,int e);

 

 

 첫 번째 함수는 시작 위치만 가지고 있어요. 위치 s에서부터, 끝까지 잘라낸 문자열을 리턴합니다. 2번째 메서드는, 시작 위치와 끝 위치를 가지고 있는데요. s에서부터 e-1까지 잘라낸 문자열을 리턴합니다.

 

 


 예제 하나를 보고, 실생활 예제를 보도록 합시다. 

 

 

 5번째 줄에서, 문자열 "chogahui05"을 선언했습니다. 그러면, 메모리에 요렇게 할당이 될 거에요.

 

 

 pool에 "chogahui05"가 들어가 있습니다. 먼저, s1.substring(3)을 호출했어요. 그러면, 3번째 인덱스부터 끝까지 출력을 합니다. 3번째 index에 있는 문자는 'g'인데요.

 

 

 'g'부터 끝까지 출력하니까, "gahui05"가 출력이 될 거에요. 다음에, s = 1, e = 5가 인자로 들어왔습니다.

 

 

 그 경우, 1번째부터, 4번째까지 출력이 되는데요. "hoga"인가요? 따라서, "hoga"가 출력됩니다. 그러면 뒤에서부터 t개를 출력한다면 어떻게 해야 할까요? 예를 들어서, 길이가 6이였다고 해 봅시다. "abcdef"였다고 해 보고요. 뒤에서 2개를 출력하면 "ef" 입니다.

 

 

 먼저 길이를 구합니다. 이 문자열의 경우, 길이는 6입니다. 그러면, 주황색으로 칠한 인덱스는 어떻게 계산하면 되나요? 6-2 = 4네요. 따라서, 아래와 같이 작성해 주시면 됩니다.

 

 

 당연하게도, 인자 값이 음수가 되는 경우, 처리를 잘 해주셔야 합니다.

 

 


 그러면, 이게 실제 문제상황에서 어떻게 쓰이는지 봅시다. 제가 만들고 있는 게시판입니다.

 

 

 아직 인덱스랑, 글 수정과 보는 것과 삭제는 없다는 것은 봐 주세요. 보시면, 제목이랑, 작성자랑 안 보이시겠지만, 작성 날짜가 있습니다. 문제는, 제목이, 상당히 길어질 수 있다는 것입니다. 예를 들어 200자가 될 수도 있고, 100자가 될 수도 있을 겁니다. 제목이 일정 이상 길어지는 경우, 목록을 보여주는 페이지에서는 앞에 x글자만 보여주는 경우가 있어요. 보시면 14번 글이, 뒤에 ..이 되어 있는 것을 보실 수 있는데요.

 

 

 이것은 뒷 부분인 '내리실손님은이번역에서내리시지마시고' 를 보여주지 않았어요. 대략 50자를 앞에서부터 40자로 줄인 셈입니다. 그렇게 하면 게시판이 더 깔끔하게 표시가 될 거에요. 이런 건 어떻게 해야 할까요?

 

 

 Board를 표시하는 모델 클래스는 BoardDAO입니다. DTO인지, DAO인지, 아니면 다른 것인지 모르겠습니다. 여기에서, 게시판 제목은 title이 담당하는데요. getter, setter가 있을 겁니다. 그 부분을 봅시다.

 

 

 getTitle이 있네요. title의 길이는 title.length()로 구할 수 있는데요. 만약에 이 길이가 40보다 크면, 앞에서부터 40개의 문자만 가지고 옵니다. 이것은 substring(0,39)로 할 수 있습니다. 그리고 뒤에 ".."을 concat 해 주면 됩니다.