public static String subStringByByte(String str, int beginIndex, int endIndex) {
if (beginIndex < 0) throw new StringIndexOutOfBoundsException(beginIndex);
if (beginIndex > endIndex) throw new StringIndexOutOfBoundsException(endIndex - beginIndex);
if (beginIndex == endIndex) return "";
int byteLength = 0;
String returnString = "";
for (int i = 0; byteLength < endIndex && i < str.length(); i++) {
char c = str.charAt(i);
byteLength += (31 < c && c < 128) ? 1 : 2;
if (byteLength > beginIndex)
returnString += c;
}
return returnString;
}
分享到:
相关推荐
总的来说,处理带有汉字的字符串时,按照字节截取需要考虑字符编码,以避免破坏字符完整性。通过自定义方法并结合Java的字符编码功能,我们可以有效地解决这个问题。在实际开发中,理解字符编码和字节流的概念对于...
这种方法特别适用于处理中文等双字节字符与英文等单字节字符混合的情况。 ### 一、问题背景 在实际开发中,经常会遇到需要按照字节长度截取字符串的需求,特别是在网络传输或存储限制的场景下。然而,简单的使用`...
实现一个按字节来截取字符串的方法,功能类似于string类的substring方法,String类是按字符截取 的,例如"中国abc".substring(1,3),将返回“国a”。这里 要求按字节截取,一个英文字符当一个字节,一个中文字符当两...
例如,如果使用UTF-8编码,一个中文字符可能占用3个或4个字节,而英文字符只占1个字节。因此,如果我们想要根据字节数截取字符串,我们不能简单地用`substring()`,而是需要先计算字符串的字节数,然后根据这个字节...
1. **确定截取单位**:首先,我们需要确定按照多少个字节进行一次截取。这个值应该是一个合理的大小,比如4个字节。需要注意的是,在UTF-8编码中,一个英文字符占1个字节,而一个中文字符占3个字节。因此,4个字节...
为了解决这个问题,我们需要编写一个定制的截取函数,这个函数会考虑到字符编码,确保截取过程中始终以完整的字符为单位进行操作。 以下是一个可能的解决方案,它使用了Java的Charset类和CharsetDecoder来实现按...
该函数首先会移除输入字符串中的所有非十六进制字符,然后检查字符串长度是否为偶数,如果不是,则在末尾添加一个空字符以保证转换正确进行。接着,通过循环遍历字符串并使用`Convert.ToByte`方法将其每两个字符转换...
这在处理包含多字节字符(如中文或特殊符号)的字符串时尤为重要。 ### 扩展方法的背景与需求 在默认情况下,C#中的`string.Substring`方法是基于字符的,这意味着它会根据字符边界来截取字符串。然而,在处理...
汉字在数据库中通常以双字节字符集(DBCS)存储,每个汉字由两个字节组成,其中第一个字节是高字节,第二个字节是低字节。如果数据导入过程中出现不完整的情况,可能会导致一个汉字只导入了一半,即只有一个字节的...
例如,如果输入字符串为 `"我 ABC"`,并且指定截取 4 个字节,则输出为 `"我 AB"`,而不是 `"我 AB"` 中的半个汉字。 SplitString 类 在本例中,我们定义了一个 `SplitString` 类,该类具有两个成员变量 `SplitStr...
题目中提到“截取前5个字节, 字符串应该为‘java程’”,意味着我们需要理解,在UTF-8编码格式下,英文字符通常占用1个字节,而中文字符则占用3个字节。因此,实际上,从“java程序教程”中截取前5个字节,得到的...
在C#中,将中文汉字转换为十六进制的关键在于首先将汉字编码为字节数组,然后将每个字节转换为其对应的十六进制表示。这里使用了`System.Text.Encoding.Default`,默认情况下它对应于当前系统的ANSI编码,但在处理...
5. 特殊情况处理:如果累积字节数达到`length+1`且当前字符是中文字符的前一个字节,说明下一个字节是中文的第二个字节,这时需要回退一位,即返回`i`位置作为子字符串的结束,以避免截取到半个汉字。 6. 如果遍历完...
疯狂java讲义第四章作业题,按字节截取一个字符串,遇到汉字的时候会告诉你是哪个汉字的哪个字节
首先,理解为什么需要按照字节长度而不是字符长度截取字符串。在处理非ASCII字符(如中文、日文等)时,一个字符可能占用多个字节。如果单纯按字符长度截取,可能会导致截取到半字符,从而破坏字符串的读取。因此,...
这是因为汉字和十六进制字符在计算机中是以不同的方式存储和表示的。 在C#中,我们可以使用Encoding类将字符串转换为Byte数组。例如,我们可以使用GetBytes方法将字符串转换为Byte数组,如下所示: ```csharp byte...
这里以"B4F3"为例,其对应的汉字是“大”。 ```sql DECLARE @int10 INT DECLARE @str16 VARCHAR(10) DECLARE @i INT DECLARE @t INT DECLARE @as VARCHAR(10) DECLARE @s1 INT DECLARE @s2 INT SET @as = 'B4F3' ...
当使用`substr()`或`substring()`截取中文字符串时,如果截取的起始位置和长度没有正确地对齐到字符边界,就可能导致部分字符的字节被截断,从而引发乱码。这种问题在其他数据库系统中也常见,尤其是那些不支持...
做过大型网站前台的Web开发程序员最头疼的事情就是前台首页的布局,这其中最最头疼的就是标题字符的截取的问题,虽然有fn:substring,但表现率以及对中文的支持均不够完善,其实最终还是归结为客户要求太高了,不过...
因为GBK编码是双字节编码,所以返回的字节数组长度为2。我们用`ToString("X2")`将字节转换为16进制字符串,并添加前导0,以确保始终为两位。 反向操作,将区位码转换回汉字,可以使用以下代码: ```csharp public ...