服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

java实现中英文混合字符截取方法

2019-06-30 21:04iteye_18448 JAVA教程

这篇文章主要为大家详细介绍了java实现中英文混合字符的截取方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

题目:

编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。

如果是charset(gb2312, GBK, BIG5), 汉字占两个字节,问题的关键在于考虑截取长度的最后一个字节,如果是属于一个汉字的第一个字节,忽略即可,而汉字每个字节前都是1,所以都是负数,采用if(byte[i]<0)判断是否是汉字的最后一个字节。

目前看到的最好的办法:

import java.io.UnsupportedEncodingException;

public class StringSpliter {

 static void fun1(String str, int length)
  throws UnsupportedEncodingException {

 // System.out.println(str.getBytes().length);
 byte[] bt = str.getBytes("gbk");
 for (int i = 0; i < bt.length; i++) {
  // 打印出字节数组中的值,可以看出只要是汉字[采用GBK编码时占两个字节/UTF-8占3个字节],并且为两个负整数
  // 由于字节的第一位都是1,所以它就是由负数来表示的
  System.out.println(bt[i]);
 }

 // 打印出按实际出入的字节数的所截字符串
 // System.out.println(new String(bt,0,length));

 // 判断最后一个是否为负,如果是负的则丢掉该字节
 if (bt[length] < 0) {
  System.out.println(new String(bt, 0, --length, "gbk"));
 } else {
  System.out.println(new String(bt, 0, length, "gbk"));
 }
 }

 public static void main(String[] args) {

 // StringSpliter.fun1("我ABC", 4);
 try {
  StringSpliter.fun1("我ABC汉DEF", 7);
 } catch (UnsupportedEncodingException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }

 }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

延伸 · 阅读

精彩推荐
  • JAVA教程一些java二进制的相关基础知识

    一些java二进制的相关基础知识

    这篇文章主要介绍了一些java二进制的相关基础知识,在Java语言中byte代表最小计量单位,byte由8位2进制数组成。,需要的朋友可以参考下...

    匠心零度2802019-06-27
  • JAVA教程Java设计模式—观察者模式详解

    Java设计模式—观察者模式详解

    这篇文章主要介绍了Java设计模式—观察者模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...

    newname4572019-06-21
  • JAVA教程Spring AOP手动实现简单动态代理的代码

    Spring AOP手动实现简单动态代理的代码

    今天小编就为大家分享一篇关于Spring AOP手动实现简单动态代理的代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    sweet_sauce2502019-06-22
  • JAVA教程使用JMX监控Zookeeper状态Java API

    使用JMX监控Zookeeper状态Java API

    今天小编就为大家分享一篇关于使用JMX监控Zookeeper状态Java API,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    Scub2582019-06-20
  • JAVA教程JAVA TIMER简单用法学习

    JAVA TIMER简单用法学习

    Timer类是用来执行任务的类,它接受一个TimerTask做参数...

    脚本之家3392019-06-18
  • JAVA教程浅谈Java中replace与replaceAll区别

    浅谈Java中replace与replaceAll区别

    这篇文章主要介绍了Java中replace与replaceAll区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...

    童梦国度4312019-06-21
  • JAVA教程Jemalloc优化MySQL和Nginx

    Jemalloc优化MySQL和Nginx

    这篇文章主要介绍了Jemalloc优化MySQL和Nginx的相关资料,需要的朋友可以参考下...

    mrr1162019-06-17
  • JAVA教程Spring创建Bean的6种方式详解

    Spring创建Bean的6种方式详解

    这篇文章主要介绍了Spring创建Bean的6种方式详解,本文讲解了在Spring 应用中创建Bean的多种方式,包括自动创建,以及手动创建注入方式,实际开发中可以根据业务场景选择合适的方案。,需要的朋友可以参考下...

    冬眠的山谷1792019-06-25