• 包含中文的字符串截取


    最近遇到个需求,由于表中某个字段类型时char而且为长度10,所以我后台获取的字符串需要截取最多到10位,否则存入数据库会报错,使用了String的substring方法获取的10个长度的内容,当其中包含中文时依然会报错,因为汉字在substring时按照一位获取的,但是存入数据库中是就是2位了,所以在substring时还要考虑是否其中包含汉字,以下的程序解决了该问题。

    实现思路:

     1,获取截取前字符串的byte序列

       2,byte序列中如果包含汉字则是使用两个负数来存储

       3,判断需要截取的位数前面有多少负数,如果是偶数个表面有1个或多个汉字,若是基数个则表明前面的内容中有半个汉字,如是直接获取则会出现乱码,所以需要获取位数-1。

    实现的代码如下:

    public class SplitTool {

     public static String subString(String source,int byteNum) throws Exception{
      String strResult = null;
      byte bt[] = source.getBytes();
      if(byteNum > bt.length){
       throw new Exception("截取的位数超出字符串的长度!!!");
      }
      
      int cnt = 0;
      for(int i=0;i<byteNum;i++) {
       if(bt[i] < 0) {
        cnt++;
       }
      }
      
      if (byteNum > 1) {
       if (bt[byteNum-1] < 0) {
        if(cnt%2 ==0) {
         strResult = new String(bt, 0, byteNum);
        } else {
         strResult = new String(bt, 0, --byteNum);
        }
       } else {
        strResult= new String(bt, 0, byteNum);
       }

      } else {
       if (byteNum == 1) {
        if (bt[byteNum-1] < 0) {
         strResult = new String(bt, 0, ++byteNum);
        } else {
         strResult = new String(bt, 0, byteNum);
        }
       } else {
        throw new Exception("输入错误!!!请输入大于零的整数:");
       }
      }
      return strResult;
     }

     public static void main(String[] args) throws Exception{
      String result = SplitTool.subString("23这是测试数据:80101201035020100005",4);
      System.out.println(result);
     }
    }

  • 相关阅读:
    Ansys Maxwell2——二维电磁场理论和有限元基础
    Ansys Maxwell在工程电磁场中的应用1——二维分析技术
    第四章 栈
    第三章 链表
    第二章 队列
    第三章 操作系统用户界面总结
    第一章 逻辑结构与物理结构
    Linux-Mint的一些配置经验
    docker安装zookeeper的使用说明
    SpringCloud初体验-使用Eureka进行服务注册和发现
  • 原文地址:https://www.cnblogs.com/gmq/p/1747418.html
Copyright © 2020-2023  润新知