备一份自己用:
/**
* 截取中英文混合的字符串, 保留前面的共sum个字符 ,抛弃被截断的汉字
*
* Unicode编码,一个汉字占2个字节
*
* UTF-8编码,一个汉字占3个字节
*
* @param chinese_char_len
* 一个汉字的长度. 可选值为2和3,2表示:Unicode编码, 3表示:UTF-8编码
* @param str
* 字符串
* @param sum
* 保留字符串前面的共sum个字符, (第sum个字符被包含)
*
* @return 截取后的字符串
* @throws Exception
* chinese_char_len不在2和3这间时抛异常
*/
private static String splitChinese(final int chinese_char_len, final String str, final int sum) throws Exception
{
final int charset = chinese_char_len; //字符集编码
if (charset < 2 || 3 < charset)
{
throw new Exception("chinese_char_len可选值为2和3,2:Unicode编码,一个汉字占2个字节, 3:UTF-8编码,一个汉字占3个字节");
}
int index = sum - 1; //下标比总数少一个
if (null == str || "".equals(str))
{
return str;
}
if (index <= 0)
{
return str;
}
byte[] bt = null;
try
{
if (charset == 2)
{
bt = str.getBytes();
}
else
{
bt = str.getBytes("UTF-8");
}
}
catch (final UnsupportedEncodingException e)
{
e.getMessage();
}
if (null == bt)
{
return str;
}
if (index > bt.length - 1)
{
index = bt.length - 1; //防越界
}
//如果当前字节小于0,说明当前截取位置 有可能 将中文字符截断了
if (bt[index] < 0)
{
int jsq = 0;
int num = index;
while (num >= 0)
{
if (bt[num] < 0)
{
jsq += 1; //计数
}
else
{
break; //循环出口
}
num -= 1;
}
int m = 0;
if (charset == 2)
{
//Unicode编码
m = jsq % 2;
index -= m;
//这里是重点,去掉半个汉字(有可能是半个), m为0表示无一半汉字,
final String substrx = new String(bt, 0, index + 1); //当前被截断的中文字符整个不取
return substrx;
}
else
{
// utf-8 编码
m = jsq % 3;
index -= m;
//这里是重点,去掉半个汉字(有可能是半个), m为0表示无一半汉字,
String substrx = null;
try
{
substrx = new String(bt, 0, index + 1, "UTF-8");
}
catch (final UnsupportedEncodingException e)
{
e.getMessage();
} //当前被截断的中文字符整个不取
return substrx;
}
}
else
{
String substrx = null;
if (charset == 2)
{
//Unicode编码
substrx = new String(bt, 0, index + 1);
return substrx;
}
else
{
// utf-8 编码
try
{
substrx = new String(bt, 0, index + 1, "UTF-8");
}
catch (final UnsupportedEncodingException e)
{
e.getMessage();
}
return substrx;
}
}
}
分享到:
相关推荐
在Delphi编程环境中,处理中文和英文混合的字符串截取是一项常见的任务,特别是在涉及到文本处理、数据解析或者用户界面展示时。由于Unicode编码的存在,中文字符通常占据两个字节,而英文字符则占据一个字节,这就...
题目中的问题聚焦于如何正确地截取一个中英混合的字符串,确保在截取过程中不会将汉字字符截断。这个问题涉及到字符编码、字符串处理以及对Unicode的理解。下面将详细解释相关知识点。 首先,我们要理解在C++中处理...
### Java中截取带汉字的字符串 在Java编程语言中,处理包含中文字符的字符串时,经常遇到的一个问题是如何正确地截取这些字符串。如果直接按照字节(byte)来进行分割,很容易导致中文字符被截断一半,从而形成乱码。...
这个方法用来处理java中可能有一些特别的需要,一大串中英文混合,需要中间截断或是中英中间添加一些特别的标识,调用这个方法 第一个参数是要处理的字符串,第二个是要在中英字符中间插入的字符。调用就可以得到想...
根据给定的文件信息,我们可以总结出以下关于C#中的字符串截取的相关知识点: ### C#字符串截取方法概述 在C#编程语言中,字符串处理是非常常见的需求之一,尤其是在Web开发、桌面应用开发以及数据处理等领域。...
### Java中英文字符串截取的关键点 1. **字符编码的影响**:中文字符在不同的编码方式下占用的字节数不同。例如,在UTF-8编码中,中文字符通常占用3个字节,而在GBK编码中,则可能占用2或4个字节。因此,在计算字符...
在IT领域,字符串处理是日常开发中的重要环节,特别是在处理包含中文字符的字符串时,由于中文字符占据的字节数量不同于英文字符,因此在截取字符串时需要考虑到不同的编码格式。本文将深入探讨中文字符串截取的底层...
在计算机编程中,字符串处理是一项基本而关键的任务,尤其在处理非英文字符时,如何精确地按照字节进行字符串截取变得尤为重要。本文将深入探讨一种按字节截取字符串的方法,并通过分析一个具体的Java代码示例来解释...
因此,在处理这类问题时,需要一种能够区分中英文字符的方法来确保截取的准确性。 #### 正则表达式基础 在上述代码中,主要采用了正则表达式来判断字符是否为中文字符。正则表达式是一种强大的文本匹配工具,它...
首先,这个类的核心思想是识别出字符串中的单词边界,然后根据指定长度进行截取。在英语或其他使用空格分隔单词的语言中,我们可以利用空格作为判断单词边界的依据。当截取时,如果即将截断一个完整的单词,那么就...
首先,我们来看`strLength`函数,这个函数用于计算中英文混合字符串的“字符”长度。在中文环境中,一个汉字通常占用三个字节,而英文字符和大部分其他字符(如标点符号)则占用一个字节。因此,计算长度时需要区分...
本文实例讲述了C#区分中英文按照指定长度截取字符串的.../// 截取文本,区分中英文字符,中文算两个长度,英文算一个长度 /// /// 待截取的字符串 /// 需计算长度的字符串 /// <returns>string public static string G
这些子字符串将被存储在一个数组中并最终返回。 #### 参数说明 该方法接受两个参数: 1. **as_string**:待分割的原始字符串。 2. **as_sign**:用于分割字符串的分隔符。 #### 代码实现 下面是具体的代码实现...
4. 国际化支持:考虑到可能处理多种语言的字符串,这个类库可能会考虑不同语言的单词边界问题,比如在英文中单词以空格分隔,而在中文中没有明显的单词边界,需要更复杂的算法来确定边界。 配合提供的"php中文网...
本文实例讲述了C#中按字符串截取长字符串的方法。分享给大家供大家参考。具体方法如下: 一般来说使用string自带的split就可以,但是split只能按char类型截取,不是很方便。 按字符串截取,使用的是正则表达式,简单...
在Golang中处理字符串时,对于英文、数字等单字节字符,直接使用切片进行截取操作是安全的,但是中文字符属于多字节字符,使用UTF-8编码的情况下,一个中文字符可能由三个字节组成。因此,如果在中文字符串上直接...
因此,如何在截取字符串的同时保证 URL 不被截断成为了一个重要的问题。 #### 技术实现方案 为了满足上述需求,我们可以利用 JavaScript 来实现一个功能,该功能能够按照指定的字节数来截取字符串,并且确保不会...
在这个场景中,"以utf8格式截取的字符串编码"指的是在处理UTF-8编码的字符串时进行截取操作的方法和注意事项。 首先,我们要理解UTF-8编码的特点。UTF-8是一种变长编码,每个Unicode字符可能由1到4个字节来表示。...
为了解决这个问题,我们需要自定义一个函数来准确地截取固定长度的字符串,同时考虑中英文字符。 标题提到的"js截取固定长度的中英文字符的简单实例",实际上就是提供了一个这样的解决方案。这个实例中的函数`...
在Java编程语言中,处理包含汉字的字符串时,由于汉字在不同编码格式下占用的字节数不同,按字节截取字符串会面临特殊挑战。本文将深入探讨如何正确地按字节截取带有汉字的字符串,以确保不出现半字符或者乱码的情况...