避免截取中英文混合字符串时出现乱码情况(中文占两个字节,英文占一个字节)
public class JustTest
{
/**
* 注释必须列出:主要功能、调用的前置条件和后置条件、 异常说明、关键算法、可见性决策等。
*/
public static void main (String[] args)
{
// String str = "n";
//
// boolean flag = Pattern.matches("[n|N]\\d{0,2}", str);
// if(flag)
// {
// if(str.length()>1)
// {
// String s = str.substring(1);
// System.out.println(Integer.parseInt(s));
// }
//
// System.out.println(flag);
// }
JustTest j = new JustTest();
System.out.println(new String(j.getByteSubStr("你好d我是z中文"
.getBytes(), 2, 6)));
}
/**
* 判定指定字节数组的指定位置,是否是完整的字 如"你好".getByte(gb2312),1将返回false
* 如"你好".getByte(gb2312),2将返回true
*
* @param sourceByte
* 编码的gb2312字节数组
* @param index
* 需要判定的数组位置
* @return 是完整字,返回true
*/
public boolean splitBygb2312 (byte[] sourceByte, int index)
{
int i = 0;
// 判定,直到位标志等于或者大与index时结束
while (i < index && i < sourceByte.length)
{
// 如果此位字节高位是1。则说明是一个汉字,跳两位判定
if (sourceByte[i] < 0)
{
i = i + 2;
} else
{
// 否则说明是0-127之间的字母或者符号,跳一位
i++;
}
}
// 如果位标志等于index,说明此位置开始是完整字,否则说明不是完整字
return (i == index ? true : false);
}
/**
* 截取源字节数组中,指定头index与尾index的子字节数组
*
* @param sourceByte需要截取的数组
* @param beginIndex
* 起始位置
* @param endIndex
* 结束位置
* @return 子数组
*/
public byte[] getByteSubStr (byte[] sourceByte, int beginIndex,
int endIndex)
{
// 判定,如果头index不是完整字,则将截取位置前移一位
if (!this.splitBygb2312(sourceByte, beginIndex))
{
beginIndex--;
}
// 判定,如果尾index不是完整字,则将截取位置前移一位
if (!this.splitBygb2312(sourceByte, endIndex))
{
endIndex--;
}
// 需要截取的长度
int length = endIndex - beginIndex;
byte[] resultByte = null;
if (sourceByte.length > endIndex)
{
// 如果末尾index没有越界,则直接拷贝数组
resultByte = new byte[length];
for (int i = 0; i < length; i++)
{
resultByte[i] = sourceByte[beginIndex + i];
}
} else
{
// 如果越界,则重置数组长度,拷贝数组
length = sourceByte.length - beginIndex;
resultByte = new byte[length];
for (int i = 0; i < length; i++)
{
resultByte[i] = sourceByte[beginIndex + i];
}
}
return resultByte;
}
}
分享到:
相关推荐
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()只能按英文截取,如果是汉字可能需要计算字符个数,如果是汉字...