个人随笔
目录
工具类:Java获取字符串的字节长度
2020-09-11 22:55:25

有时候我们需要知道字符串有多少个字节,比如Oracle中保存内容是按字节的长度的,因为中文和因为是不同的,所以需要写一个工具类来获取。

  1. /**
  2. * 根据指定的字节长度截取字符串
  3. * @param orignal : 原始字符串
  4. * @param count : 要截取的字节长度
  5. * @return
  6. */
  7. public static String substringByByteLength(String orignal, int count){
  8. if(orignal != null && !"".equals(orignal)){
  9. int tmp = count;
  10. try {
  11. orignal = new String(orignal.getBytes("GBK"),"GBK");
  12. System.out.println(orignal.getBytes("GBK").length);
  13. if(tmp > 0 && tmp < orignal.getBytes("GBK").length){
  14. System.out.println("截取前的值:"+orignal);
  15. StringBuffer buff = new StringBuffer();
  16. char c;
  17. for(int i = 0; i < tmp; i++){
  18. c = orignal.charAt(i);
  19. if((buff.toString() + String.valueOf(c)).getBytes("GBK").length <= count ){
  20. buff.append(c);
  21. }
  22. if(isChinese(c)){
  23. --tmp; //遇到中文汉字,截取字节总数减1
  24. }
  25. }
  26. String str = buff.toString();
  27. System.out.println("截取后的值:"+str);
  28. return str;
  29. }
  30. return orignal;
  31. } catch (UnsupportedEncodingException e) {
  32. e.printStackTrace();
  33. }
  34. }
  35. return "";
  36. }
  37. public static boolean isChinese(char ch) {
  38. //获取此字符的UniCodeBlock
  39. Character.UnicodeBlock ub = Character.UnicodeBlock.of(ch);
  40. // GENERAL_PUNCTUATION 判断中文的“号
  41. // CJK_SYMBOLS_AND_PUNCTUATION 判断中文的。号
  42. // HALFWIDTH_AND_FULLWIDTH_FORMS 判断中文的,号
  43. if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION) {
  44. return true;
  45. }
  46. return false;
  47. }
 1197

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2