当前位置: 移动技术网 > IT编程>开发语言>Java > Java截取中英文混合字符串的方法

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

2019年07月19日  | 移动技术网IT编程  | 我要评论

题目:

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网