Java截取中英文混合字符串的方法

 更新时间:2019年06月19日 09:15:34   作者:余-雷  
这篇文章主要为大家详细介绍了Java截取中英文混合字符串的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

题目:

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

GB2312、GBK、GB18030,CP936以及CNS11643都满足条件 -- 中文是占用2个字节的,英文是占用1一个字节 。

因为中文转换为byte字节,随着编码的不同,转换的字节长度也会不通,如编码为UTF-8,一个中文字符串转换为byte占三个字节.

package com.suanfa;
 
import java.io.UnsupportedEncodingException;
 
public class CharactersSplit {
 /**
 * @param text
 *      目标字符串
 * @param length
 *      截取长度
 * @param encode
 *      采用的编码方式
 * @return
 * @throws UnsupportedEncodingException
 */
 
 public static String substring(String text, int length, String encode)
  throws UnsupportedEncodingException {
 if (text == null) {
  return null;
 }
 StringBuilder sb = new StringBuilder();
 int currentLength = 0;
 for (char c : text.toCharArray()) {
  currentLength += String.valueOf(c).getBytes(encode).length;
  if (currentLength <= length) {
  sb.append(c);
  } else {
  break;
  }
 }
 return sb.toString();
 }
 
 public static void main(String[] args) throws UnsupportedEncodingException {
 String text = "我ABC汉DEF";
 int length1 = 3;
 int length2 = 6;
 String[] encodes = new String[] { "GB2312", "GBK", "GB18030", "CP936",
  "CNS11643", "UTF-8" };
 
 for (String encode : encodes) {
  System.out.println(new StringBuilder().append("用").append(encode)
   .append("编码截取字符串 -- 【").append(text).append("】")
   .append(length1).append("个字节的结果是【")
   .append(substring(text, length1, encode)).append("】")
   .toString());
  System.out.println(new StringBuilder().append("用").append(encode)
   .append("编码截取字符串 -- 【").append(text).append("】")
   .append(length2).append("个字节的结果是【")
   .append(substring(text, length2, encode)).append("】")
   .toString());
 }
 
 }
}

运行后输出:

用GB2312编码截取字符串 -- 【我ABC汉DEF】3个字节的结果是【我A】
用GB2312编码截取字符串 -- 【我ABC汉DEF】6个字节的结果是【我ABC】
用GBK编码截取字符串 -- 【我ABC汉DEF】3个字节的结果是【我A】
用GBK编码截取字符串 -- 【我ABC汉DEF】6个字节的结果是【我ABC】
用GB18030编码截取字符串 -- 【我ABC汉DEF】3个字节的结果是【我A】
用GB18030编码截取字符串 -- 【我ABC汉DEF】6个字节的结果是【我ABC】
用CP936编码截取字符串 -- 【我ABC汉DEF】3个字节的结果是【我A】
用CP936编码截取字符串 -- 【我ABC汉DEF】6个字节的结果是【我ABC】
用CNS11643编码截取字符串 -- 【我ABC汉DEF】3个字节的结果是【我A】
用CNS11643编码截取字符串 -- 【我ABC汉DEF】6个字节的结果是【我ABC】
用UTF-8编码截取字符串 -- 【我ABC汉DEF】3个字节的结果是【我】
用UTF-8编码截取字符串 -- 【我ABC汉DEF】6个字节的结果是【我ABC】

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

相关文章

  • Java实现快速排序算法(Quicktsort)

    Java实现快速排序算法(Quicktsort)

    这篇文章主要介绍了Java实现快速排序算法(Quicktsort),有需要的朋友可以参考一下
    2013-12-12
  • 深入理解Java设计模式之简单工厂模式

    深入理解Java设计模式之简单工厂模式

    这篇文章主要介绍了JAVA设计模式之简单工厂模式的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下
    2021-11-11
  • java之构造器的重载问题

    java之构造器的重载问题

    这篇文章主要介绍了java之构造器的重载问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Java获取文件的hash值(SHA256)两种方式

    Java获取文件的hash值(SHA256)两种方式

    这篇文章主要给大家介绍了关于Java获取文件hash值(SHA256)的两种方式,SHA256是一种哈希算法,它是不可逆的,也就是说无法解密,需要的朋友可以参考下
    2023-09-09
  • Maven及Springboot配置JDK版本,编码,源码打包等方式

    Maven及Springboot配置JDK版本,编码,源码打包等方式

    这篇文章主要介绍了Maven及Springboot配置JDK版本,编码,源码打包等方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Java中Scanner使用方式:单行/多行输入

    Java中Scanner使用方式:单行/多行输入

    这篇文章主要介绍了Java中Scanner使用方式:单行/多行输入,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Spring Security 安全框架应用原理解析

    Spring Security 安全框架应用原理解析

    这篇文章主要介绍了Spring Security 安全框架应用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • 如何基于http代理解决Java固定ip问题

    如何基于http代理解决Java固定ip问题

    这篇文章主要介绍了如何基于http代理解决Java固定ip问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java及nginx实现文件权限控制代码实例

    Java及nginx实现文件权限控制代码实例

    这篇文章主要介绍了Java及nginx实现文件权限控制代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Maven打包并生成运行脚本的示例代码

    Maven打包并生成运行脚本的示例代码

    这篇文章主要介绍了Maven打包并生成运行脚本,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07

最新评论