要求:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
/**
* 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
* 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,
* 应该输出为"我ABC"而不是"我ABC+汉的半个"。
*/
public static String subString(String str,int len){
if(str == null && "".equals(str)){
return null;
}
//将字符串中的char数组转换成指定编码方式的byte数组的函数
byte[] strBytes = null;
try {
strBytes = str.getBytes("GBK");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//得到字符串的长度,判断截取字符串的长度是否在判断的范围内,否则返回原串
int strLen = strBytes.length;
if(len >= strLen || len < 1){
return str;
}
// System.out.println("strBytes.length="+strBytes.length);
// System.out.println("len="+len);
int count = 0;
for(int i=0; i<len; i++){
//将每个字节数组转换为整型数,以为后面根据值的正负来判断是否为汉字
int value = strBytes[i];
// System.out.print(value+",");
//如果是汉字(负),则统计截取字符串中的汉字所占字节数
if(value < 0){
count++;
}
// System.out.println("zh count="+count);
}
//依据判断给定的字符串是否含有汉字,利用String类的substring()方法来截取不同的长度
//根据所统计的字节数,判断截取到字符是否为半个汉字,奇数为半个汉字
if(count % 2 !=0){
//如果在截取长度为1时,则将该汉字取出,
//其他情况则不截取这里的截取长度则按字符长度截取(截取字节长度数-截取汉字字节数/2-截取到的半个汉字的字节数)
len = (len == 1)?len:len-count/2-1;
// System.out.println("处理后的len="+len);
}else{
//截取字符长度为字节长度-汉字所占字节长度/2(汉字占两个字节)
len = len-(count/2);
}
return str.substring(0,len);
}
public static void main(String[] args) {
//情况一:
String inStr = "我ABC你";
String str = subString(inStr, 6);
System.out.println(str); //我ABC
//情况二:首字符为汉字
inStr = "我ABC汉DEF";
str = subString(inStr, 1);
System.out.println(str); //我
//情况三:中间有连续汉字
inStr = "我AB爱孩子CDEF";
str = subString(inStr,9);
System.out.println(str); //我AB爱孩
//情况四:没有汉字
inStr = "ABCDEF";
str = subString(inStr,4);
System.out.println(str); //ABCD
}
分享到:
相关推荐
在 `main` 方法中,我们创建了一个 `SplitString` 对象,并调用其 `SplitIt` 方法来截取字符串。 总结 本例中,我们实现了一个 Java 字符串截取函数,该函数可以截取指定字节的字符串,并保证汉字不被截半个。该...
了解这些方法后,我们就可以灵活地根据需求截取字符串中的特定字节数部分了。但要注意,字节截取可能会涉及到字符编码问题,因此在实际操作时要特别留意编码格式,避免出现乱码或者截取不完整的情况。
在TIA博途中,创建一个FB,定义输入和输出参数,如输入的字符数组和输出的字符串。在FB的实现部分编写上述逻辑,然后在OB1或其他需要的地方调用这个FB。 在测试和验证FB无误后,可以将其保存到全局库文件中,以便在...
本题中,我们需要编写一个函数,该函数能够根据指定的字节数截取字符串,并确保不会出现汉字被截半的情况。这是一个涉及字符编码和边界条件处理的问题。 首先,我们来理解题目中的要求: 1. 函数接收两个参数,一个...
这个函数`SafeSubstring`接收字符串S、起始字节位置StartByte和截取的字节数LenBytes,返回一个从指定字节位置开始,长度为LenBytes字节的新字符串。注意,这个函数假设输入的都是有效的字节位置,没有进行边界检查...
它可能包含了一个名为`sliceByByte`的方法,接受一个字符串和要截取的字节数作为参数,然后按照上述步骤进行操作。 SliceByByteTest.java作为测试文件,可能会创建一些测试用例,包括各种长度和编码的字符串,来...
首先,理解为什么需要按照字节长度而不是字符长度截取字符串。在处理非ASCII字符(如中文、日文等)时,一个字符可能占用多个字节。如果单纯按字符长度截取,可能会导致截取到半字符,从而破坏字符串的读取。因此,...
7. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉...
6. 获取字符串字节数函数:`octet_length(string)` 该函数返回字符串中的字节数。例如,`octet_length('jose')`将返回`4`。 7. 字符串查找函数:`position(substring in string)` 该函数返回字符串中指定子串的...
面试中可能会遇到类似的问题,要求编写一个函数来截取字符串,确保汉字不被截半。以下是一个简单的示例实现: ```java public class SplitString { private String str; private int byteNum; public ...
"php通用截取字符串"这个主题主要涉及如何在PHP中对字符串进行截取,以便获取我们感兴趣的特定部分。这通常用于显示预览、处理用户输入或者从长文本中提取关键信息。在PHP中,有多种方法可以实现字符串截取,下面...
总结,处理中文字符串截取时,理解字符编码和字符串处理函数的特性至关重要。PHP的mbstring扩展提供了强大且安全的方法来处理多字节字符,确保了中文字符串截取的准确性。在编写代码时,要时刻关注字符串的编码类型...
因此,在截取字符串时需要注意字符的字节数量,以避免截取到半个汉字。 #### 二、自定义函数StrByteLeft()详解 为了更好地解决中文字符串截取问题,可以自定义一个函数`StrByteLeft()`来实现更精确的截取。 1. **...
这是一个非标准的函数,它从`src`所指向的位置开始,将数据复制到`dest`,直到遇到第一个等于`c`的字节或复制了`count`个字节为止,然后返回最后一个不等于`c`的字节的下一个位置的指针。如果没有找到`c`,则返回`...
这个类应该包含一个方法,接收字符串、起始位置和长度作为参数,返回截取后的字符串。在处理中文字符时,我们需要确保按照字符而非字节进行截取。 2. **编译Java代码**:将Java源代码编译成.class文件。确保添加了...
`SUBSTR` 函数用于从指定位置开始截取字符串的一部分。例如: - `SELECT SUBSTR('12345', 1, 2) FROM SYSIBM.SYSDUMMY1;` 返回 `'12'`。 - `SELECT LEFT('aaaaabbb', 2) FROM SYSIBM.SYSDUMMY1;` 返回 `'aa'`,与 `...
根据给定文件的信息,本文将深入探讨如何在C#中实现一种高效的按字节截取字符串的方法,尤其针对包含单字节与双字节混合字符的情况。这种方法特别适用于处理中文等双字节字符与英文等单字节字符混合的情况。 ### 一...
因此,当我们说“按字节截取字符串”时,需要注意的是,由于UTF-8编码的特性,一个字符可能由一个或多个字节组成。这就意味着简单的按字节数截取可能会导致截取到的字符串包含不完整的多字节字符,从而引发乱码问题...
本例通过Java代码实现了一个截取字符串的函数,该函数能够根据指定的字节数截取字符串,并保证在截取过程中不会将中文字符截断,也就是说,如果一个中文字符的字节长度超过了一个字节,那么在截取时会保持该字符的...
可以截取中英文字符串,也可以含有字符,里面有好几个方法 有按字符个数截取 有按字节数来截取不会存在乱码