欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-12 13:14:19
题目: 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我abc”4,应该截为“我ab”,输入“我abc汉d...

题目:

编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我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】

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