/**
* 判断一个字符是Ascill字符还是其它字符(如汉,日,韩文字符)
*
* @param char
* c, 需要判断的字符
* @return boolean, 返回true,Ascill字符
*/
public static boolean isLetter(char c) {
int k = 0x80;
return c / k == 0 ? true : false;
}
/**
* 得到一个字符串的长度,显示的长度,一个汉字或日韩文长度为2,英文字符长度为1
*
* @param String
* s ,需要得到长度的字符串
* @return int, 得到的字符串长度
*/
public static int length(String s) {
if (s == null)
return 0;
char[] c = s.toCharArray();
int len = 0;
for (int i = 0; i < c.length; i++) {
len++;
if (!isLetter(c[i])) {
len++;
}
}
return len;
}
/**
* 截取一段字符的长度,不区分中英文,如果数字不正好,则少取一个字符位
*
* @author patriotlml
* @param String
* origin, 原始字符串
* @param int
* len, 截取长度(一个汉字长度按2算的)
* @return String, 返回的字符串
*/
public static String substring(String origin, int len) {
if (origin == null || origin.equals("")||len<1)
return "";
byte[] strByte = new byte[len];
if (len > length(origin)){
return origin;}
System.arraycopy(origin.getBytes(), 0, strByte, 0, len);
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 : --len;
}
return new String(strByte, 0, len);
}
static String FirstNBytes(String s, int n) {
Pattern p = Pattern.compile("^[\\u4e00-\\u9fa5]$");
int i = 0, j = 0;
for (char c : s.toCharArray()) {
Matcher m = p.matcher(String.valueOf(c));
i += m.find() ? 2 : 1;
++j;
if (i == n)
break;
if (i > n) {
--j;
break;
}
}
return s.substring(0, j);
}
public static void main(String args[]) {
String a = "我ABC汉DEF";
for (int i = 0; i < 11; ++i)
System.out.println("No." + i + ":" + FirstNBytes(a, i));
}
分享到:
相关推荐
在Java中,处理字符串是非常常见且重要的任务之一,尤其是在涉及到国际化应用时,如何高效准确地处理中英文混合的字符串就显得尤为重要了。本文将基于提供的代码片段来探讨几种不同的Java字符串处理方法,并着重分析...
根据给定文件的信息,我们将深入探讨Java中字符串截取的原理、方法以及在中英文操作系统下的特殊处理。 ### Java字符串截取 #### 原理与实现 在Java中,字符串本质上是一个不可变的字符序列,由`char`类型的数组...
在Delphi编程环境中,处理中文和英文混合的字符串截取是一项常见的任务,特别是在涉及到文本处理、数据解析或者用户界面展示时。由于Unicode编码的存在,中文字符通常占据两个字节,而英文字符则占据一个字节,这就...
此方法适用于需要快速截取中英文混合字符串的应用场景,特别是在需要处理大量数据的情况下。然而,需要注意的是: - **性能考量**:虽然该方法在大多数情况下都能提供良好的性能,但对于极端大数据量的处理可能需要...
4. **字符串构建**:使用 `Substring()` 方法逐个字符添加到结果字符串中,直至达到指定长度。 ### 总结 以上三种方法分别适用于不同的字符串截取场景,其中 `GetFirstString` 方法考虑了中文字符的特殊性,而 `...
在C++编程中,处理字符串是一项常见的任务,特别是在游戏开发客户端和服务器端的场景中。题目中的问题聚焦于如何正确地截取一个中英混合的字符串,确保在截取过程中不会将汉字字符截断。这个问题涉及到字符编码、...
这篇博客“PHP 不区分中英文截取utf8字符串”提供了一个解决方案,使得在UTF-8环境下可以正确地截取包含中文和英文的字符串,而不影响其完整性。 首先,我们需要理解UTF-8编码的特点。UTF-8是一种变长编码,英文...
- 遍历字节数组,每两个字节转换成一个字符并累加到结果字符串中。 - 当字符计数达到指定长度时停止遍历。 #### 方法三:利用正则表达式 还可以使用正则表达式来实现更复杂的截取逻辑,例如只截取连续的英文字符或...
在ASP(Active Server Pages)开发中,经常遇到需要处理中英文混合的字符串,尤其是在页面展示时,为了保持布局美观,需要对字符串进行截取。在处理这类问题时,普通的字符串截取函数,如`Left()`,无法很好地处理中文...
这里的`iconv_strlen()`用于计算字符串中的字符数,而不是字节数。注意,由于中文字符通常为三字节,所以除以3得到字符数。 3. **使用正则表达式** 如果你对正则表达式比较熟悉,还可以利用正则来截取中文字符串。...
可以截取中英文字符串,也可以含有字符,里面有好几个方法 有按字符个数截取 有按字节数来截取不会存在乱码
在Java编程语言中,处理包含中文字符的字符串时,经常遇到的一个问题是如何正确地截取这些字符串。如果直接按照字节(byte)来进行分割,很容易导致中文字符被截断一半,从而形成乱码。这是因为一个中文字符通常占用多...
"统计字符串中英文标点数量并截取.zip"的文件提供了针对这种情况的一个解决方案。这个压缩包内包含的可能是Java代码示例(如csdn-demo),用于批量处理字符串,统计其中的中英文标点符号的数量,并根据指定的字符...
### Java中英文字符串截取的关键点 1. **字符编码的影响**:中文字符在不同的编码方式下占用的字节数不同。例如,在UTF-8编码中,中文字符通常占用3个字节,而在GBK编码中,则可能占用2或4个字节。因此,在计算字符...
- 使用循环逐个处理字符串中的字符,并累计已处理的字节数量。 - 当累计字节数量达到指定长度时,停止循环并返回结果。 - 对于单字节字符,则直接使用`Left()`函数完成截取。 #### 三、示例与应用 假设我们需要...
字符串截取是指从一个较长的字符串中提取出特定长度或范围内的子字符串的过程。这在很多场景下都非常有用,比如在展示文章列表时只显示前几行文字,或者在处理大量数据时仅关注某些字段等。 ##### 2.2 中文字符编码...
例如,给定的标题 "Pb字符串中的中文和英文(含符号)拆分" 描述了一个需求:将像 '中字A文C' 这样的字符串拆分为 '中字文' 和 'AC'。为了实现这一功能,我们可以创建一个自定义函数,例如 `uf_split_str_enorcn()`。 ...
示例代码中定义了`u8_title_substr`函数,通过循环遍历字符串中的每个字符,根据字符的编码类型(1、2、3或4字节)累加相应的权重值,最终实现了等宽度截取UTF-8编码的中英文字符的功能。 #### 五、注意事项 - 在...
C#开发中经常用到一些字符串截取的函数,文档中含有大多数的函数
截取含有中英文的字符串,按字节进行截取,当出现汉字时不能截取半个汉字要把汉字补全。