/**
* 字符串按字节截取
* @param str 原字符
* @param len 截取长度
* @return String
* @author ivan
* @since 2010.07.05
*/
public static String splitString(String str, int len) {
return splitString(str, len, "...");
}
/**
* 字符串按字节截取
* @param str 原字符
* @param len 截取长度
* @param elide 省略符
* @return String
* @author ivan
* @since 2010.07.05
*/
public static String splitString(String str,int len,String elide) {
if (str == null) {
return "";
}
byte[] strByte = str.getBytes();
int strLen = strByte.length;
//int elideLen = (elide.trim().length() == 0) ? 0 : elide.getBytes().length;
int elideLen = 0;
if (len >= strLen || len < 1) {
return str;
}
if (len - elideLen > 0) {
len = len - elideLen;
}
int count = 0;
for (int i = 0; i < len; i++) {
int value = (int) strByte[i];
if (value < 0) {
count++;
}
}
if (count % 2 != 0) {
len = (len == 1) ? len + 1 : len - 1;
}
return new String(strByte, 0, len) + elide.trim();
}
转
http://blgaici1.iteye.com/blog/723255
public static String subStr(String str, int num) {
int max = num;
try {
max = trimGBK(str.getBytes("GBK"),num);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
int sum = 0;
if (str != null && str.length() > max) {
StringBuilder sb = new StringBuilder(max);
for (int i = 0; i < str.length(); i++) {
int c = str.charAt(i);
// if ((c & 0xff00) != 0)
// sum += 2;
// else
sum += 1;
if (sum <= max)
sb.append((char) c);
else
break;
}
return sb.append("...").toString();
} else
return str != null ? str : "";
}
public static int trimGBK(byte[] buf,int n){
int num = 0;
boolean bChineseFirstHalf = false;
if(buf.length < n )return buf.length;
for(int i=0;i<n;i++)
{
if(buf[i]<0 && !bChineseFirstHalf){
bChineseFirstHalf = true;
}else{
num++;
bChineseFirstHalf = false;
}
}
return num;
}
分享到:
相关推荐
### Java中英文字符串截取的关键点 1. **字符编码的影响**:中文字符在不同的编码方式下占用的字节数不同。例如,在UTF-8编码中,中文字符通常占用3个字节,而在GBK编码中,则可能占用2或4个字节。因此,在计算字符...
### Java中截取带汉字的字符串 在Java编程语言中,处理包含中文字符的字符串时,经常遇到的一个问题是如何正确地截取...通过以上方法,我们可以在Java中有效地处理包含中文字符的字符串截取问题,避免出现乱码等情况。
总之,Java中的字符串截取不仅是一项基础技能,也是解决复杂问题的关键所在。通过理解字符编码原理,结合具体应用场景,开发者可以更加高效、准确地完成字符串的处理工作,提升软件产品的质量和用户体验。
总结来说,Java截取中英文混合字符串的方法需要综合考虑编码方式和汉字占用字节长度的问题,并且需要采取适当的技术手段来确保汉字不会被截断。通过自定义截取方法,并在截取过程中正确地使用编码方式,我们可以有效...
这个压缩包内包含的可能是Java代码示例(如csdn-demo),用于批量处理字符串,统计其中的中英文标点符号的数量,并根据指定的字符编码(GBK或UTF)来计算字符串的总长度。如果字符串的总长度超过预设的最大长度,...
这个方法用来处理java中可能有一些特别的需要,一大串中英文混合,需要中间截断或是中英中间添加一些特别的标识,调用这个方法 第一个参数是要处理的字符串,第二个是要在中英字符中间插入的字符。调用就可以得到想...
然而,当处理包含中文字符的字符串时,简单的按字符截取可能会出现问题,因为中文字符通常占用两个字节,而英文字符只占用一个字节。为了实现更精确的截取,可以采用如下的方法: ```java private String str; ...
为了解决这个问题,我们需要理解Unicode编码以及如何在Java中正确处理多字节字符。下面我们将详细探讨这个问题,并提供一种有效的解决方案。 首先,我们需要知道汉字在计算机中通常是使用Unicode编码表示的,每个...
题目中提到“截取前5个字节, 字符串应该为‘java程’”,意味着我们需要理解,在UTF-8编码格式下,英文字符通常占用1个字节,而中文字符则占用3个字节。因此,实际上,从“java程序教程”中截取前5个字节,得到的...
除此之外,文章中还介绍了如何根据长度来截取字符串,并区分中英文字符的处理。`subStr(String abc, int len)`方法的实现逻辑是:遍历给定字符串,并对每个字符进行判断,如果字符是英文字符(ASCII码值大于64且小于...
在Java中,处理字符串是非常常见且重要的任务之一,尤其是在涉及到国际化应用时,如何高效准确地处理中英文混合的字符串就显得尤为重要了。本文将基于提供的代码片段来探讨几种不同的Java字符串处理方法,并着重分析...
由于计算机内部存储和处理的都是二进制数据,对于非英文字符,在不同的编码(如UTF-8、GBK)下占用的字节数是不同的,因此直接按字符截取往往不能满足需求。本文旨在介绍如何利用Java语言按照字节截取字符串,并给出...
例如,在中文环境下,一个汉字占两个字符位置,而英文字符只占一个字符位置。如果按照字符数量来截取,可能会导致截取后的字符串不完整或出现乱码。 ### 二、技术要点 #### 1. 全角与半角字符识别 全角字符通常指...
本文将详细介绍一个用于在Java中根据字节数而非字符数截取字符串的方法——`getLimitLengthString`。该方法能够确保在截断中文字符串时不会出现乱码,并且可以适用于JSP页面中的中文字符串截取需求。 #### 方法实现...
例如,在 UTF-8 编码下,英文字符通常占用 1 字节,而中文字符则占用 3 字节。 - **字符串编码**:用于表示文本的计算机编码格式,常见的有 ASCII、UTF-8、GBK 等。 - **jQuery**:一种常用的 JavaScript 库,可以...
在Java编程中,有时我们需要处理字符串的截取问题,特别是在涉及到多语言,尤其是中文字符时。中文字符在计算机内部是以双字节的形式存储的,一个中文字符占用的字节数是英文字符的两倍。因此,当我们需要截取等长...
Java面试题中提到的问题是,当截取字符串时,要保证汉字不被分割。这是因为substring方法在处理多字节字符(如汉字)时,可能会在字符中间截断,导致乱码。为了解决这个问题,我们需要编写一个定制的截取函数,这个...
在Java编程中,有时我们需要按照字节长度来截取字符串,尤其在处理中文字符时,因为一个中文字符在UTF-8编码下占用两个字节,而一个英文字符仅占用一个字节。这样的需求通常出现在前端展示限制或者传输数据时,避免...
在Java中,一个英文字符通常占用一个字节,而一个中文字符通常占用两个字节。本例通过Java代码实现了一个截取字符串的函数,该函数能够根据指定的字节数截取字符串,并保证在截取过程中不会将中文字符截断,也就是说...
根据给定的信息,本文将详细解释如何在Java中处理中英文混合字符串的截取问题,尤其是在需要固定长度显示的情况下。 ### 一、问题背景 在实际应用开发中,经常需要处理包含中文和英文字符的字符串。例如,在一个...