IT/JAVA

한글 바이트 단위로 자르기

craveu 2007. 2. 15. 19:23
http://www.javaclue.org/tbbs/view?board=doc&num=159
 
// ByteCutTest.java
//
// @date 2004/02/14
// @author JavaClue.ORG

 

import java.nio.*;

 

public class ByteCutTest {

 

    public static String truncateNicely(String s, int len, String tail) {
        if (s == null)
            return null;
    
        int srcLen = realLength(s);
        if (srcLen < len)
            return s;

 

        String tmpTail = tail;
        if (tail == null)
            tmpTail = "";
 
        int tailLen = realLength(tmpTail);
        if (tailLen > len)
            return "";

 

        char a;
        int i = 0;
        int realLen = 0;
        for (i = 0; i < len - tailLen && realLen < len - tailLen; i++) {
           a = s.charAt(i);
           if ((a & 0xFF00) == 0)
               realLen += 1;
           else
               realLen += 2;
        }

 

        while (realLength(s.substring(0, i)) > len - tailLen) {
            i--;
        }

 

        return s.substring(0, i) + tmpTail;
    }

 

    public static int realLength(String s) {
        return s.getBytes().length;
    }

 

    public static void main(String[] args) {
        String str = "이것은 Hangul(한글)입니다.";
        System.out.println(str);
        System.out.println(" 2: " + truncateNicely(str, 2, "*"));
        System.out.println(" 3: " + truncateNicely(str, 3, "*"));
        System.out.println(" 9: " + truncateNicely(str, 9, "*"));
        System.out.println("10: " + truncateNicely(str, 10, "*"));
        System.out.println("11: " + truncateNicely(str, 11, "*"));
        System.out.println("12: " + truncateNicely(str, 12, "*"));
        System.out.println("13: " + truncateNicely(str, 13, "*"));
        System.out.println("14: " + truncateNicely(str, 14, "*"));
        System.out.println("15: " + truncateNicely(str, 15, "*"));
        System.out.println("16: " + truncateNicely(str, 16, "*"));

 

        System.out.println(" 2: " + truncateNicely(str, 2, "..."));
        System.out.println(" 3: " + truncateNicely(str, 3, "..."));
        System.out.println(" 9: " + truncateNicely(str, 9, "..."));
        System.out.println("10: " + truncateNicely(str, 10, "..."));
        System.out.println("11: " + truncateNicely(str, 11, "..."));
        System.out.println("12: " + truncateNicely(str, 12, "..."));
        System.out.println("13: " + truncateNicely(str, 13, "..."));
        System.out.println("14: " + truncateNicely(str, 14, "..."));
        System.out.println("15: " + truncateNicely(str, 15, "..."));
        System.out.println("16: " + truncateNicely(str, 16, "..."));

 

        System.out.println(" 2: " + truncateNicely(str, 2, ""));
        System.out.println(" 3: " + truncateNicely(str, 3, ""));
        System.out.println(" 9: " + truncateNicely(str, 9, ""));
        System.out.println("10: " + truncateNicely(str, 10, ""));
        System.out.println("11: " + truncateNicely(str, 11, ""));
        System.out.println("12: " + truncateNicely(str, 12, ""));
        System.out.println("13: " + truncateNicely(str, 13, ""));
        System.out.println("14: " + truncateNicely(str, 14, ""));
        System.out.println("15: " + truncateNicely(str, 15, ""));
        System.out.println("16: " + truncateNicely(str, 16, ""));


        System.out.println("16: " + truncateNicely(str, 16, null));

 

        String data = str;
        while (realLength(data) > 5) {
            String tmp = truncateNicely(data, 5, "");
            System.out.println(tmp);
            data = data.substring(tmp.length());
        }
        if (data.length() > 0)
            System.out.println(data);
    }
}
/*
실행 결과:--------------------------
이것은 Hangul(한글)입니다.
 2: *
 3: 이*
 9: 이것은 H*
10: 이것은 Ha*
11: 이것은 Han*
12: 이것은 Hang*
13: 이것은 Hangu*
14: 이것은 Hangul*
15: 이것은 Hangul(*
16: 이것은 Hangul(*
 2:
 3: ...
 9: 이것은...
10: 이것은 ...
11: 이것은 H...
12: 이것은 Ha...
13: 이것은 Han...
14: 이것은 Hang...
15: 이것은 Hangu...
16: 이것은 Hangul...
이것
은 Ha
ngul(
한글)
입니
다.
*/