package com.luodfu.test;
import java.io.UnsupportedEncodingException;
/**
* 中英文截取指定长度的字符
* 一个中文算两个字符,保证不会出乱码
* 截取最终长度为length,或length-1
* @author luodongfu
* @place hangzhou
*/
public class TestChinese {
public static void main(String[] args) {
String aa="A22中z文G测试_英文A看_看";
System.out.println(subChineseStr(aa,7) );
System.out.println(subChineseStr(aa,8) );
System.out.println(subChineseStr(aa,9) );
}
/**
* 判断字符是否为中文
* @param c
* @return
*/
public static boolean isChinese(char c) {
Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
|| ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
return true;
}
return false;
}
/**
* 截取中英文字符中指定长度,保证不会出现乱码。
* 截取最终长度为length,或length-1.这样就不会出现乱码了,呵呵
* @param str 被截取的字符串
* @param length 截取几个长度
* @return
*/
public static String subChineseStr(String str,int length)
{
if(str==null||str.trim().equals(""))
{
return "";
}
try {
if(str.getBytes("GBK").length<=length)
{
return str;
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return "";
}
StringBuffer sb=new StringBuffer();
int count=0;
char[] ch = str.toCharArray();
for (int i = 0; i < ch.length; i++) {
char c = ch[i];
if (isChinese(c))
{
if(count<=length-2)
{
sb.append(c);
}
count=count+2;
}
else
{
if(count<length)
{
sb.append(c);
}
count++;
}
}
return sb.toString();
}
}
测试结果如下:
A22中z
A22中z文
A22中z文G
分享到:
相关推荐
自己输入一个字符串,字符串中可以包括字符和汉字,截取指定的字符串
C#字符串截取固定长度的方法
c#截取指定长度 中英文混合字符串 一个中文为两个字符计算,英文一个字符。
去年的时候由于工作需要,写了个用C#截取指定长度的方法,当时颇费了一番周折,因为想错了方向。 例如要截取字符串"我是1个中国人",取3位长度,那得到的结果是"我",如果取6位长度,得到的结果是"我是1",因为汉字...
前后台实现精确截取指定长度字符串(考虑全角半角)前后台实现精确截取指定长度字符串(考虑全角半角)前后台实现精确截取指定长度字符串(考虑全角半角)前后台实现精确截取指定长度字符串(考虑全角半角)
本文实例讲述了C#区分中英文按照指定长度截取字符串的方法。分享给大家供大家参考。具体如下: 这段C#代码用于按照指定的长度截取字符串,一个中文字符算2个字符,按照这个方法截取的字符串基本可以保持显示长度一致...
delphi 实现截取字符串中中文+英文混合截取,当字符串中包含中文和英文支付时,有时候会将一个中文截取1半,出现乱码。该demo能很好的解决该问题
C# 按照字节长度截取字符串,可以截取任意字节长度得字符串,使用了一点正则表达式。
js获得字符真实长度,如果长度超过len值,js截取固定长度字符
可以截取中英文字符串,也可以含有字符,里面有好几个方法 有按字符个数截取 有按字节数来截取不会存在乱码
impala的substr()和substring()函数是不支持中文的,创建一个udf解决impala sql中substr()函数截取中文字符串乱码的问题
一个php截取指定字符串之间的字符串的类,介绍一个php截取指定字符串之间的字符串的类,需要的朋友可以自行下载学习使用。
如果第一个参数为负值,则表示从字符串的尾部开始计算下标位置,即 -1 表示 最后一个字符,-2 表示倒数第二个字符,以此类推。这对于左侧字符长度不固 定时非常有用。 ECMAScript 不再建议使用该方法,推荐使
1、 当字符串全部为单字节字符时,则可以用SubString方法截取指定长度即可。 2、 当字符串全部为双字节字符时,则只需要用SubString方法截取指定长度的一半 3、 当字符串为单字节双字节混合时,则我们可以用折中这样...
java字符串截取 - 中英文操作系统处理字符汉字
PHP UTF-8 等宽度截取中英文字符.txt
字符串按照指定的字节数来截取
SQL截取字符串函数(1、截取从字符串左边开始N个字符 2、截取从字符串右边开始N个字符(例如取字符www.163.com) 3、截取字符串中任意位置及长度 等等)
常常我们在新闻发布系统中,会用到截取固定长度的字符串长度信息的情况,通常我们会想到使用left()或者mid()函数来解决问题,但是往往难以达到我们想要的效果,使用这个函数,使你读出的字符串更符合你的需要,当然...
给写了2个方法,一个是直接截取单个需要的字符串,比如字符串string a="ab123456",我只需要提取3,那么就是单独截取就可以了,从2开始到4结束就行。 第二个是把所有的符合条件的字符串都截取出来,提取出来,比如...