博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 截取中英文混合字符串
阅读量:5018 次
发布时间:2019-06-12

本文共 2225 字,大约阅读时间需要 7 分钟。

题目:

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

转载于:https://www.cnblogs.com/wuyida/p/6300331.html

你可能感兴趣的文章
代码说明call和apply方法的区别 (咱们这方面讲解的少,这样的题有变式,需要举例讲解一下)...
查看>>
T-SQL 类型转换
查看>>
在eclipse中设计BPMN 2.0工作流定义的根本步骤
查看>>
Json对象与Json字符串互转(4种转换方式)
查看>>
PAT甲级1002 链表实现方法
查看>>
查看Linux信息
查看>>
Python中sys模块sys.argv取值并判断
查看>>
【详记MySql问题大全集】四、设置MySql大小写敏感(踩坑血泪史)
查看>>
并查集
查看>>
ubuntu 11.04下android开发环境的搭建!
查看>>
Bzoj 3343: 教主的魔法
查看>>
括号序列(栈)
查看>>
一件趣事
查看>>
DevExpress控件TExtLookupComboBox实现多列模糊匹配输入的方法
查看>>
【动态规划】洛谷-过河卒
查看>>
linux环境下mysql 5.7.1X 如何重置root密码
查看>>
hdu 1007 Quoit Design(最近点对模板)
查看>>
php中strlen和mb_strlen的区别
查看>>
数据库【mongodb篇】练习操作
查看>>
第十二周学习进度
查看>>