编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
GB2312、GBK、GB18030,CP936以及CNS11643都满足条件 -- 中文是占用2个字节的,英文是占用1一个字节 。
中文编码资料:
中文字符编码简介
http://www.cftea.com/c/2008/03/140B5A561NFN51DS.asp
中文编码基础知识介绍
http://www.eygle.com/digest/2007/01/zhs16gbk_char.html
JAVA 编码
import java.io.UnsupportedEncodingException;
/**
* 题目: 编写一个截取字符串的函数,输入为一个字符串和字节数, 输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,
* 应该截为“我AB”,输入“我ABC汉DEF”,6, 应该输出为“我ABC”而不是“我ABC+汉的半个”。
*
* 解决方法: 中文是占用2个字节的,英文是占用1一个字节, 所以先确定一种编码满足此条件。
* GB2312、GBK、GB18030,CP936以及CNS11643都满足条件。
*
* @author Eric
* @version 1.0
*
*/
public class CharactersSplit {
/**
*
* @param text 目标字符串
* @param length 截取长度
* @param encode 采用的编码方式
* @return
* @throws UnsupportedEncodingException
*/
public 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 void test() throws Exception {
String text = "我ABC汉DEF";
int length1 = 3;
int length2 = 6;
String[] encodes = new String[] { "GB2312", "GBK", "GB18030", "CP936",
"CNS11643" };
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());
}
}
public static void main(String[] args) throws Exception {
new CharactersSplit().test();
}
}
测试结果:
用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】
分享到:
相关推荐
Java截取中英文混合字符串的方法 Java截取中英文混合字符串的方法是指在Java语言中截取混合了中英文的字符串,并且保证汉字不被截半个的方法。这种方法在实际开发中非常有用,特别是在处理中文字符串时。 在Java中...
本文将详细介绍一种用于高效截取中英文混合字符串的方法。该方法适用于处理大量数据(例如10万条记录),能够在极短的时间内(例如1秒)完成所需的操作。这种方法主要应用于ASP.NET和C#环境,对于那些希望优化字符串...
本篇文章将深入探讨如何在Delphi中实现中文和英文混合字符串的正确截取,以及相关的关键知识点。 首先,我们需要理解Delphi中的字符串类型。在Delphi中,TString类型的字符串默认是Unicode编码的,这意味着它可以...
以下是一个简单的例子,展示如何正确地截取中英混合字符串: ```cpp #include #include #include #include std::wstring utf8_to_wstring(const std::string& utf8_str) { std::wstring_convert...
这三个函数在处理中英文混合字符串时非常实用,它们能够正确计算字符串的实际长度并进行相应的截取,解决了在ASP环境中中文字符截取的难题。在实际应用中,可以将这些函数集成到网页的代码中,以便在需要处理字符串...
通过学习和使用如`assoc_substr`这样的自定义函数,我们可以确保在处理中英文混合字符串时获得预期的结果。同时,持续关注和学习PHP相关的字符串处理技巧和最佳实践,能够帮助我们编写出更高效、更健壮的代码。
可以截取中英文字符串,也可以含有字符,里面有好几个方法 有按字符个数截取 有按字节数来截取不会存在乱码
本人为了C++课程设计写的字符串处理头文件,支持中英文混合处理,多重通配符等等.
这种方法主要用于解决在 Java 中截取字符串时遇到的问题,即在截取中英文混合字符串时如何避免汉字被截半个。 在 Java 中,字符串是以 Unicode 编码方式存储的,每个字符占用 2 个字节。因此,在截取字符串时需要...
本文实例讲述了C#实现中英文混合字符串截取.../// 截取中英文混合字符串 /// /// 字符文本 /// 截取长度 /// <param name=replacetxt>replacetxt替换的多余字符 /// <returns></returns> public string GetString(str
### C# 截取指定长度的中英文混合字符串方法解析 在C#中处理文本时,经常需要对字符串进行截取操作。对于包含中文字符的字符串来说,由于一个中文字符通常占据两个字节的位置(在某些编码下),因此在进行长度判断...
//不分中英文按字符串长度循环每个字符截取换行 这个是隔10个字符换行一次 String psStr="asdfghjklzxcvbnmzxcvbnmsdfghaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbb"; String aa=""; String bb=""; for (int i...
而在cut_str()函数中,提供了截取中英文混合字符串的方法。该函数首先计算出要截取的长度(cutlength),然后通过循环遍历源字符串(sourcestr)。在遍历过程中,根据字符的ASCII值判断当前字符是英文字符还是中文...
在文档中,提供了两个C#函数的实现代码,用于截取中英文混合字符串。这两个函数在实现时考虑了中英文字符编码的不同,以确保截取后的内容能够正确显示。 第一个函数是`CutStr`,它的作用是截取给定字符串至最大长度...
这个方法用来处理java中可能有一些特别的需要,一大串中英文混合,需要中间截断或是中英中间添加一些特别的标识,调用这个方法 第一个参数是要处理的字符串,第二个是要在中英字符中间插入的字符。调用就可以得到想...
假设有一个包含中英文混合的字符串`"Hello, 你好!"`,现在希望截取前5个字符(其中中文字符按两个字符计): ```javascript var str = "Hello, 你好!"; var result = subString(str, 5, true); console.log(result)...
在PHP编程中,处理UTF-8编码的...通过分析这个示例,你可以更深入地理解如何在PHP中处理UTF-8编码的字符串,以及如何在中英文混合的情况下进行截取。记得打开文件查看具体的实现方式,以便学习和应用到自己的项目中。
C++截取汉字和英文混合字符串是一种非常常见的操作,在实际开发中,我们经常需要截取字符串中的汉字和英文部分。然而,C++的标准库函数string.substr()只能按英文截取,如果是汉字可能需要计算字符个数,如果是汉字...