`
MouseLearnJava
  • 浏览: 467292 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

截取中英文混合字符串

    博客分类:
  • Java
 
阅读更多
编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我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】

0
3
分享到:
评论

相关推荐

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

    本文详细介绍了Java中截取中英文混合字符串的方法,并通过实例演示了其应用。 首先,我们了解到,在Java中,可以通过substring方法来截取字符串。但是,这种基于字符数量的截取方式并不适用于中英文混合的情况,...

    高效中英文字符串截取方法

    本文将详细介绍一种用于高效截取中英文混合字符串的方法。该方法适用于处理大量数据(例如10万条记录),能够在极短的时间内(例如1秒)完成所需的操作。这种方法主要应用于ASP.NET和C#环境,对于那些希望优化字符串...

    delphi 实现截取字符串中中文+英文混合截取

    本篇文章将深入探讨如何在Delphi中实现中文和英文混合字符串的正确截取,以及相关的关键知识点。 首先,我们需要理解Delphi中的字符串类型。在Delphi中,TString类型的字符串默认是Unicode编码的,这意味着它可以...

    C++中英混合字符串截取

    以下是一个简单的例子,展示如何正确地截取中英混合字符串: ```cpp #include #include #include #include std::wstring utf8_to_wstring(const std::string& utf8_str) { std::wstring_convert...

    ASP中英文混合字符串的截取

    这三个函数在处理中英文混合字符串时非常实用,它们能够正确计算字符串的实际长度并进行相应的截取,解决了在ASP环境中中文字符截取的难题。在实际应用中,可以将这些函数集成到网页的代码中,以便在需要处理字符串...

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

    通过学习和使用如`assoc_substr`这样的自定义函数,我们可以确保在处理中英文混合字符串时获得预期的结果。同时,持续关注和学习PHP相关的字符串处理技巧和最佳实践,能够帮助我们编写出更高效、更健壮的代码。

    截取中英文字符串函数

    可以截取中英文字符串,也可以含有字符,里面有好几个方法 有按字符个数截取 有按字节数来截取不会存在乱码

    VC++根据GB2312标准的中英文混合字符串处理

    本人为了C++课程设计写的字符串处理头文件,支持中英文混合处理,多重通配符等等.

    java实现中英文混合字符截取方法

    这种方法主要用于解决在 Java 中截取字符串时遇到的问题,即在截取中英文混合字符串时如何避免汉字被截半个。 在 Java 中,字符串是以 Unicode 编码方式存储的,每个字符占用 2 个字节。因此,在截取字符串时需要...

    C#实现中英文混合字符串截取的方法

    本文实例讲述了C#实现中英文混合字符串截取.../// 截取中英文混合字符串 /// /// 字符文本 /// 截取长度 /// &lt;param name=replacetxt&gt;replacetxt替换的多余字符 /// &lt;returns&gt;&lt;/returns&gt; public string GetString(str

    c#截取指定长度,中英文混合字符串

    ### C# 截取指定长度的中英文混合字符串方法解析 在C#中处理文本时,经常需要对字符串进行截取操作。对于包含中文字符的字符串来说,由于一个中文字符通常占据两个字节的位置(在某些编码下),因此在进行长度判断...

    js中英文混合的字符串换行

    //不分中英文按字符串长度循环每个字符截取换行 这个是隔10个字符换行一次 String psStr="asdfghjklzxcvbnmzxcvbnmsdfghaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbb"; String aa=""; String bb=""; for (int i...

    PHP针对中英文混合字符串长度判断及截取方法示例

    而在cut_str()函数中,提供了截取中英文混合字符串的方法。该函数首先计算出要截取的长度(cutlength),然后通过循环遍历源字符串(sourcestr)。在遍历过程中,根据字符的ASCII值判断当前字符是英文字符还是中文...

    C#中英文混合字符串截取函数

    在文档中,提供了两个C#函数的实现代码,用于截取中英文混合字符串。这两个函数在实现时考虑了中英文字符编码的不同,以确保截取后的内容能够正确显示。 第一个函数是`CutStr`,它的作用是截取给定字符串至最大长度...

    java 中字符串只中英数字混合需要分割的解决办法

    这个方法用来处理java中可能有一些特别的需要,一大串中英文混合,需要中间截断或是中英中间添加一些特别的标识,调用这个方法 第一个参数是要处理的字符串,第二个是要在中英字符中间插入的字符。调用就可以得到想...

    JavaScript截取中文字符串

    假设有一个包含中英文混合的字符串`"Hello, 你好!"`,现在希望截取前5个字符(其中中文字符按两个字符计): ```javascript var str = "Hello, 你好!"; var result = subString(str, 5, true); console.log(result)...

    PHP 不区分中英文截取utf8字符串

    在PHP编程中,处理UTF-8编码的...通过分析这个示例,你可以更深入地理解如何在PHP中处理UTF-8编码的字符串,以及如何在中英文混合的情况下进行截取。记得打开文件查看具体的实现方式,以便学习和应用到自己的项目中。

    c++截取汉字和英文混合字符串代码实例

    C++截取汉字和英文混合字符串是一种非常常见的操作,在实际开发中,我们经常需要截取字符串中的汉字和英文部分。然而,C++的标准库函数string.substr()只能按英文截取,如果是汉字可能需要计算字符个数,如果是汉字...

Global site tag (gtag.js) - Google Analytics