JAVA > Tip&Tech > byte 단위로 문자열자르기
 
JAVA
Library
Tip&Tech
Q&A
java공식사이트
Java  Platform Standard Edition 6 의 API 스펙
Tip&Tech
  HOME > JAVA > Tip&Tech
 
작성일 : 09-07-13 10:35
byte 단위로 문자열자르기
 글쓴이 : 덩벙이 (211.♡.155.10)
조회 : 8,264   추천 : 0   비추천 : 0  
이것은 자를 길이를 리턴하는 것이 아니고 절단된 스트링을 리턴합니다.
속도를 빠르게 하기 위해 변환된 바이트 배열에서
파라미터로 넘어온 길이(length)를 기준으로 그 좌측으로
각 바이트들의 MSB(최상위 비트)가 1인지 아닌지 체크해 나갑니다.

cutStringByBytes 메소든 파라미터로 지정한 길이 혹은 거기에 +1 한 것이 되게 잘라 리턴하는 메소드이고,

cutInStringByBytes 메소든 파라미터로 지정한 길이 혹은 거기에 -1 한 것이 되게 잘라 리턴하는 메소드입니다.

+1 또는 -1을 하는 이유는 잘단된 마지막 바이트가
한글 한 자의 2 바이트가 잘려 선두 바이트만 남는 경우를
방지하기 위함입니다.



public class CutStringTest {
/**
* 만든 이: 자바클루(javaclue)
* 만든 날: 2003/05/15
*
* 지정한 정수의 개수 만큼 빈칸(" ")을 스트링을 구한다.
*
* @param int 문자 개수
* @return String 지정된 개수 만큼의 빈칸들로 연결된 String
*/
public static String spaces(int count) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < count; i++) {
sb.append(' ');
}
return sb.toString();
}


/**
* 만든 이: 자바클루(javaclue)
* 만든 날: 2003/06/26
*
* 지정한 정수의 개수 만큼 빈칸(" ")을 스트링을 구한다.
* 절단된 String의 바이트 수가 자를 바이트 개수보다 모자라지 않도록 한다.
*
* @param str 원본 String
* @param int 자를 바이트 개수
* @return String 절단된 String
*/
public static String cutStringByBytes(String str, int length) {
byte[] bytes = str.getBytes();
int len = bytes.length;
int counter = 0;
if (length >= len) {
return str + spaces(length - len);
}
for (int i = length - 1; i >= 0; i--) {
if (((int)bytes[i] & 0x80) != 0)
counter++;
}
return new String(bytes, 0, length + (counter % 2));
}

/**
* 만든 이: 자바클루(javaclue)
* 만든 날: 2003/06/26
*
* 지정한 정수의 개수 만큼 빈칸(" ")을 스트링을 구한다.
* 절단된 String의 바이트 수가 자를 바이트 개수를 넘지 않도록 한다.
*
* @param str 원본 String
* @param int 자를 바이트 개수
* @return String 절단된 String
*/
public static String cutInStringByBytes(String str, int length) {
byte[] bytes = str.getBytes();
int len = bytes.length;
int counter = 0;
if (length >= len) {
return str + spaces(length - len);
}
for (int i = length - 1; i >= 0; i--) {
if (((int)bytes[i] & 0x80) != 0)
counter++;
}
return new String(bytes, 0, length - (counter % 2));
}

public static void main(String[] args) {
String str = "자바클루(javaclue)가 만든 글자 자르기";
for (int i = 4; i < 24; i++)
System.out.println(i + ": [" + cutInStringByBytes(str, i) + "]");
}
}

 
 

Total 13
번호 제   목 글쓴이 날짜 추천 비추천 조회
13 [안드로이드 스튜디오] 퍼미션 부분 정리 덩벙이 09-08 0 0 128
12 콘솔에서 jar파일 만들기 덩벙이 09-05 0 0 121
11 아두이노(Arduino)와 자바(Java) 통신 RXTX 덩벙이 03-18 0 0 2264
10 진수변환 16진수를 10진수로 10진수를 16진수로 덩벙이 03-18 0 0 1619
9 java.util.Timer 를 사용하여 잡 스케줄링 하기 덩벙이 06-07 0 0 7419
8 JAVA C++참조 덩벙이 05-04 0 0 5376
7 java soap 사용하기 덩벙이 05-03 0 0 5328
6 java socket(소켓) 샘플코드 덩벙이 02-16 0 0 6209
5    java socket(소켓) 샘플코드 덩벙이 06-08 0 0 7540
4 자바관련 추천사이트 덩벙이 12-16 0 0 5152
3 java 인코딩 테스트를 한번에 (한글깨졌을때, 한글깨짐..) 덩벙이 08-19 0 0 13518
2 byte 단위로 문자열자르기1 덩벙이 07-13 0 0 10889
1 byte 단위로 문자열자르기 덩벙이 07-13 0 0 8265
 
개인홈페이지 덤벙닷컴은 프로그래머와 디자이너위한 IT커뮤니티 공간입니다.
Copyright ⓒ www.dumbung.com. All rights reserved.