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( 한글) 입니 다. */