import java.io.UnsupportedEncodingException; public class StrCut { public static void main(String[] args) throws Exception { System.out.println(subString("我abc你好asd",6)); } 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; } int count = 0; for(int i=0; i<len; i++){ //将每个字节数组转换为整型数,因为后面根据值的正负来判断是否为汉字 int value = strBytes[i]; //如果是汉字(负),则统计截取字符串中的汉字所占字节数 if(value < 0){ count++; } } //依据判断给定的字符串是否含有汉字,利用String类的substring()方法来截取不同的长度 //根据所统计的字节数,判断截取到字符是否为半个汉字,奇数为半个汉字 if(count % 2 !=0){ //如果在截取长度为1时,则将该汉字取出, //其他情况则不截取这里的截取长度则按字符长度截取(截取字节长度数-截取汉字字节数/2-截取到的半个汉字的字节数) len = (len == 1)?len:len-count/2-1; }else{ //截取字符长度为字节长度-汉字所占字节长度/2(汉字占两个字节) len = len-(count/2); } return str.substring(0,len); } }
以上为截取长度为6如果最后一个为中文则不显示的问题
相关推荐
Java 字符串截取函数 ...本例中,我们实现了一个 Java 字符串截取函数,该函数可以截取指定字节的字符串,并保证汉字不被截半个。该函数使用 `substring` 方法来实现字符串截取,并且可以应用于各种字符串处理场景。
因此,在截取字符串时需要注意字符的字节数量,以避免截取到半个汉字。 #### 二、自定义函数StrByteLeft()详解 为了更好地解决中文字符串截取问题,可以自定义一个函数`StrByteLeft()`来实现更精确的截取。 1. **...
首先,理解为什么需要按照字节长度而不是字符长度截取字符串。在处理非ASCII字符(如中文、日文等)时,一个字符可能占用多个字节。如果单纯按字符长度截取,可能会导致截取到半字符,从而破坏字符串的读取。因此,...
因此,如果直接按照字节数来截取字符串,可能会导致截取结果包含半个汉字,这显然是不希望看到的。 ### 实现细节分析 #### 1. 理解UTF-8编码 UTF-8是一种可变长度的Unicode编码格式,它支持所有Unicode字符,同时...
面试中可能会遇到类似的问题,要求编写一个函数来截取字符串,确保汉字不被截半。以下是一个简单的示例实现: ```java public class SplitString { private String str; private int byteNum; public ...
3. 边界处理:类库可能还包含了处理边界情况的逻辑,例如当字符串长度小于截取长度时,如何返回原始字符串,或者当字符串长度远大于截取长度时,如何处理过多的字符。 4. 国际化支持:考虑到可能处理多种语言的字符...
总的来说,Java中精确截取字符串涉及到字符编码、字节长度计算等多个方面。对于不同的场景,需要选择合适的方法,确保截取后的字符串既能满足长度要求,又能正确显示其中的文本内容。在实际开发中,可以根据项目需求...
在Java编程中,有时我们需要按照字节长度来截取字符串,尤其在处理中文字符时,因为一个中文字符在UTF-8编码下占用两个字节,而一个英文字符仅占用一个字节。这样的需求通常出现在前端展示限制或者传输数据时,避免...
这里我们探讨的主题是如何按显示长度来截取字符串,这在处理多语言文本时尤其重要,因为不同字符集(如UTF-8)中的字符长度可能不一致。在UTF-8编码下,一个英文字符通常占用1个字节,而一个汉字则可能占用1到3个...
- 对于中文字符的处理,应特别注意边界情况的处理,避免出现半个汉字的情况。 - 使用 jQuery 操作 DOM 元素时,需要确保 jQuery 已经正确加载。 综上所述,字符串截取是一个在日常开发中非常实用的功能,尤其在处理...
### 高效中英文字符串截取方法 #### 知识点概述 本文将详细介绍一种用于高效截取中英文混合字符串的方法。该方法适用于处理大量数据(例如10万条记录),能够在极短的时间内(例如1秒)完成所需的操作。这种方法...
为了实现这一需求,Java提供了String类的getBytes()方法,用于将字符串转换成字节数组,同样也提供了substring()方法用于截取字符串。但在本例中,使用substring()方法无法直接达到目标,因为这种方法无法直接对字节...
### Java截取字符串(判断汉字) #### 背景与目的 在开发Web应用程序时,尤其是在使用Java Server Pages (JSP) 进行开发时,经常需要处理包含中文字符的字符串。由于中文字符通常占用两个字节,而英文字符只占用一...
- **处理边界情况**:如果找不到更多的分隔符,则默认将`@location`设置为字符串的长度加1,以便正确截取出最后一个子字符串。 - **返回子字符串**:利用`SUBSTRING`函数根据`@start`和`@location`的值截取第n个子...
例如,给定的标题 "Pb字符串中的中文和英文(含符号)拆分" 描述了一个需求:将像 '中字A文C' 这样的字符串拆分为 '中字文' 和 'AC'。为了实现这一功能,我们可以创建一个自定义函数,例如 `uf_split_str_enorcn()`。 ...
本题中,我们需要编写一个函数,该函数能够根据指定的字节数截取字符串,并确保不会出现汉字被截半的情况。这是一个涉及字符编码和边界条件处理的问题。 首先,我们来理解题目中的要求: 1. 函数接收两个参数,一个...
- 判断字符串长度是否超过目标长度。如果未超过,则直接返回原字符串。 - 如果超过了目标长度,则进一步计算实际字符宽度,并据此确定截取的位置。 - 在循环中,逐个字符判断其是全角还是半角字符,并相应累加宽度值...
Java面试题中提到的问题是,当截取字符串时,要保证汉字不被分割。这是因为substring方法在处理多字节字符(如汉字)时,可能会在字符中间截断,导致乱码。为了解决这个问题,我们需要编写一个定制的截取函数,这个...
需要注意的是,在截取字符串时,我们必须考虑到编码方式对汉字占用字节长度的影响。这是因为,如果错误地估计了字节长度,就有可能导致汉字被截断,从而引发错误。例如,在某些编码方式下,一个汉字可能由三个字节...