본문 바로가기
JAVASCRIPT & JQUERY

[JSTL] fn함수 split을 이용한 특정 문자 기준 자르는 실전 방법!!

by GoodDayDeveloper 2021. 8. 25.
반응형

안녕하세요!!!

오늘은 데이터베이스에서 뽑은 데이터안에 특정 문자를 기준으로 데이터를 뽑는 방법을 정리해보겠습니다.

JSTL에서의 함수중에 split이란 함수를 사용할겁니다! (split이란 단어 뜻대로 나뉘는 기능을 합니다)

제가 뽑고 싶은 데이터는 아래 화면에 있는 sr_eq_value란 컬럼 안에 있는 데이터입니다.

두 단어가 콤마(,) 사이를 두고 나눠져 있습니다..

그래서 저는 콤마를 기준으로 데이터를 하나하나 뽑아보겠습니다!!

 

 

 


우선 HTML 가장 상단에 JSTL 함수선언을 합니다!

 

1
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
cs

 

일단 저의 코드를 소개해드리겠습니다. 

저 같은 경우는, 숫자가 0으로 표시된 곳에 sr_eq_value의 값을 순차대로 적용하려 합니다.

(split에 응용된 코드니 그냥 참고만 하시면 됩니다... split 함수 설명은 아래서 하겠습니다.)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<c:set var="key" value="1" />
<c:forEach var="result" items="${excelResult}" varStatus="status">
<c:choose>
<c:when test="${result.number eq '0'}">
    <td>
    <c:set var="text" value="${fn:split(result.sr_eq_value,',')}" />
    <c:forEach var="textValue" items="${text}" varStatus="varStatus">
     <c:if test="${varStatus.count eq key }">
         ${textValue}
     </c:if>
    </c:forEach> 
    </td>
    <c:set var="key" value="${key + 1}" />
</c:when>
<c:otherwise>
    <td>${result.number}</td>
</c:otherwise>
</c:choose>
</c:forEach>
cs

 

split 함수 설명

split함수의 사용법은 fn:split(A,B)이며 A와 B에서 지정한 문자열로 나누어 배열로 반환합니다.

여기서 중요한건 배열로 반환되는 것인데, 

예를들어 sr_eq_value의 데이터 값(2021,굿프로그램) 을 콤마(,)을 기준으로 split하면,

1번 값에 '2021'가 들어가 있고, 2번 값에 '굿프로그램' 이 들어가게 됩니다.

그래서 번호에 따라 뽑아서 사용하면 됩니다!

 

split 실전 코드 설명

 

가장 윗편에 c:set을 하여 key값을 선언하고 값을 1을 넣어줍니다.

이 이유는 split으로 문자열 배열로 반환이 되면 순차적으로 뽑아 사용할 예정이기 때문입니다.

 

<c:when test="${result.number eq '0'}"> (만약에 숫자가 0인 값이 있다면)

 

c:set을 통해서 사용할 값을 text로 해주고 value에 fn함수인 split을 사용합니다.
첫번째 칸에는 뽑고자 하는 컬럼인 sr_eq_value를 넣고, 

두번째 칸에는 구분할 특정 문자(콤마)를 넣어줍니다.

 

그리고 배열형식이기 때문에 c:forEach 반복을 통해 데이터를 꺼내면서 (사용값은 textValue입니다.)

varStatus속성에서 count(1부터 시작)를 이용하여 값을 뽑아내줍니다.


여기서 기존 key값인 1과 count를 매칭시키고, 
반복문 끝에 key값에 +1을 통해 데이터가 순차적으로 나올 수 있도록 설정해줍니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<c:set var="key" value="1" />
<c:forEach var="result" items="${excelResult}" varStatus="status">
<c:choose>
<c:when test="${result.number eq '0'}">
    <td>
    <c:set var="text" value="${fn:split(result.sr_eq_value,',')}" />
    <c:forEach var="textValue" items="${text}" varStatus="varStatus">
     <c:if test="${varStatus.count eq key }">
         ${textValue}
     </c:if>
    </c:forEach> 
    </td>
    <c:set var="key" value="${key + 1}" />
</c:when>
cs

 

 


또 하나의 방법!

 

 

간편하게 처리하는 방법은 아래와 같은 형식으로 숫자를 지정해주면 숫자에 맞는 값이 추출됩니다. 

${fn:split(result.sr_eq_value,',')[0]} - '2021'
${fn:split(result.sr_eq_value,',')[1]} - '굿프로그램'

이런식으로 말이죠

 

반응형

댓글