Java截取中英文混合字符串的方法
程序员文章站
2024-02-13 17:28:04
题目:
编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我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】
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 你真的了解java单例模式了吗?