2012. 1. 3. 12:06

java 한글을 2byte로 취급하여 substring 하는 함수

// java에선 한글도 1글자, 영문이나 다른 글자도 1글자로 취급되어 substring 된다.
// 이게 통신같은데선 문제가 될 수가 있어서 한글은 2byte, 그 외는 1byte 로 취급하는 함수가 필요
// 안드로이드에서 쓸거였는데, 이상하게 인터넷에서 찾은건 정상 동작을 하지 않아서
// 자력갱생으로 만듬;; 뭐 오류가 좀 있는거 같은데 괜찮을거임 ( -_-);;;
// 참고로 한글을 UTF-8로 취급하면 getbyte시에 한글이 3byte, 기타는 1byte로 먹고
// euc-kr로 하면 한글이 2byte 나머지는 1byte를 차지한다


         private String subString(String strData, int iStartPos, int iByteLength) {
byte[] bytTemp = null;
int iRealStart = 0;
int iRealEnd = 0;
int iLength = 0;
int iChar = 0;
try {
// UTF-8로 변환하는경우 한글 2Byte, 기타 1Byte로 떨어짐
bytTemp = strData.getBytes("EUC-KR");
iLength = bytTemp.length;

for(int iIndex = 0; iIndex < iLength; iIndex++) {
if(iStartPos <= iIndex) {
break;
}
iChar = (int)bytTemp[iIndex];
if((iChar > 127)|| (iChar < 0)) {
// 한글의 경우(2byte 통과처리)
// 한글은 2Byte이기 때문에 다음 글자는 볼것도 없이 스킵한다
iRealStart++;
iIndex++;
} else {
// 기타 글씨(1Byte 통과처리)
iRealStart++;
}
}
iRealEnd = iRealStart;
int iEndLength = iRealStart + iByteLength;
for(int iIndex = iRealStart; iIndex < iEndLength; iIndex++)
{
iChar = (int)bytTemp[iIndex];
if((iChar > 127)|| (iChar < 0)) {
// 한글의 경우(2byte 통과처리)
// 한글은 2Byte이기 때문에 다음 글자는 볼것도 없이 스킵한다
iRealEnd++;
iIndex++;
} else {
// 기타 글씨(1Byte 통과처리)
iRealEnd++;
}
}
} catch(Exception e) {
//
Log.d("DEBUG",e.getMessage());
}

return strData.substring(iRealStart, iRealEnd);
}