如何对一个字符串截位,要求一个区分中英文情况。也就是一个中文字算两位,而一个英文字母算一位? ? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我先说一下你的意思,看理解的对不对:实现一个subString(String sourceString, int num)方法,对字符串进行截取,sourceString参数为源串,num为要截取的字符长度。其中要实现中英文混和,就是中文字符占用两个字节,也要算作一个字符。对于gbk编码的系统而言,汉字的编码占用两个字节,第一个字节的值在81到FE之间而英文和字符的ascii码值都小于0x81这样可以对源字符串进行遍历,通过判断第一个字节的值来判断是否为中文字符,可以实现目标。不同的操作系统内部采用的编码标准可能不同,具体的实现依赖于你的编码标准,windows系统好像使用的都是gbk的编码标准 截取字符串,判断其ascii吗是否大于160,如果大于160则是汉字! 如果需要中文字符占用两个字节,也要算作一个字符,那就直接str.substring(int),如"你a好吗abc哈"的substring(2)就是"好吗abc哈"。否则,如果需要结果是"a好吗abc哈",那可以先getBytes(),然后再System.copyarray()。 byte[] bs = s.getBytes(); byte[] bb = new byte[bs.length - 2]; System.arraycopy(bs, 2, bb, 0, bs.length - 2); s = new String(bb); to xsmart(刘旭) : 你这个方法不通用吧。如果取3个字符了,有些情况下就有乱码。 取3字节中文的时候,判断一下,第3个就不要取了判断中英文可以用getBytes(),中文打印出来是负值 我记得我在5年前就处理过这样的事情,那时候用PB.对字符串的长度做一个循环,截取字符串的每个字符,用ascii值对每个字符作处理如果该字符的ascii值大于160,则,该字符肯定是汉字的一半,且显示的是乱码。然后将相邻的字符拼装成汉字。(拼装的函数我忘记了)全长度循环,双位拼装。 class SplitString { String SplitStr; int SplitByte; public SplitString(String str, int bytes) { SplitStr = str; SplitByte = bytes; System.out.println("The String is:'" + SplitStr + "';SplitBytes=" + SplitByte); } public void SplitIt() { int loopCount; loopCount = (SplitStr.length() % SplitByte == 0) ? (SplitStr.length() / SplitByte) : (SplitStr.length() / SplitByte + 1); System.out.println("Will Split into " + loopCount); for (int i = 1; i <= loopCount; i++) { if (i == loopCount) { System.out.println(SplitStr.substring((i - 1) * SplitByte, SplitStr.length())); } else { System.out.println(SplitStr.substring((i - 1) * SplitByte, (i * SplitByte))); } } } public static void main(String[] args) { SplitString ss = new SplitString("test中dd文dsaf中男大3443n中国43中国人", 5); ss.SplitIt(); }}转载 to zx2002027(希望之星) : 你给的程序好像不对吧? 看看这个:)对字符串按照byte位截取的问题!http://community.csdn.net/Expert/TopicView3.asp?id=4971224应该对你有帮助! 呵呵,在现JBUILDER下面写了一下:String str = "abc我爱山abc东省"; System.out.println(str.substring(1,6));打印出来的结果是: bc我爱山System.out.println(str.substring(1,5));打印结果是: bc我爱前天的时候给一个人面试的时候人家是这么写的,我当时还以为他的答案有问题,结果今天看到帖子自己试了一下,结果竟然是这样的~瀑布汗啊~编码格式~ String str = "abc啊不才";str.subString(4);str.subString(5);按楼主的要求应该都是"啊不才"? java内部使用unicode编码,不存在这个问题的 String本身就是char数组!!本来就是一个字符一个字符分开了的 关于java读写文件的问题 我想获取21端口的信息 无法获取元数据 求解关于java中汉字解析 晕死,Date获取的系统时间和真实时间为什么会相差8小时 之字形扫描即ZigTag程序代码不能运行,高手不要笑啊 一个被调用类如何跟踪调用者,希望大家给我出点注意 如何获取当前目录(或当前class的所在目录)? 什么叫内部类和外部类??? 求一个JAVA POST请求登录网站的代码 请问java数据转移的问题: JDBC基础问题
实现一个subString(String sourceString, int num)方法,对字符串进行截取,
sourceString参数为源串,num为要截取的字符长度。其中要实现中英文混和,就是中文
字符占用两个字节,也要算作一个字符。
对于gbk编码的系统而言,汉字的编码占用两个字节,第一个字节的值在81到FE之间
而英文和字符的ascii码值都小于0x81这样可以对源字符串进行遍历,通过判断第一个
字节的值来判断是否为中文字符,可以实现目标。
不同的操作系统内部采用的编码标准可能不同,具体的实现依赖于你的编码标准,
windows系统好像使用的都是gbk的编码标准
否则,如果需要结果是"a好吗abc哈",那可以先getBytes(),然后再System.copyarray()。
byte[] bs = s.getBytes();
byte[] bb = new byte[bs.length - 2];
System.arraycopy(bs, 2, bb, 0, bs.length - 2);
s = new String(bb);
你这个方法不通用吧。如果取3个字符了,有些情况下就有乱码。
对字符串的长度做一个循环,截取字符串的每个字符,用ascii值对每个字符作处理
如果该字符的ascii值大于160,则,该字符肯定是汉字的一半,且显示的是乱码。然后将相邻的
字符拼装成汉字。(拼装的函数我忘记了)
全长度循环,双位拼装。
String SplitStr; int SplitByte; public SplitString(String str, int bytes) {
SplitStr = str;
SplitByte = bytes;
System.out.println("The String is:'" + SplitStr + "';SplitBytes="
+ SplitByte);
} public void SplitIt() {
int loopCount; loopCount = (SplitStr.length() % SplitByte == 0) ? (SplitStr.length() / SplitByte)
: (SplitStr.length() / SplitByte + 1);
System.out.println("Will Split into " + loopCount);
for (int i = 1; i <= loopCount; i++) {
if (i == loopCount) { System.out.println(SplitStr.substring((i - 1) * SplitByte,
SplitStr.length()));
} else { System.out.println(SplitStr.substring((i - 1) * SplitByte,
(i * SplitByte)));
}
}
} public static void main(String[] args) {
SplitString ss = new SplitString("test中dd文dsaf中男大3443n中国43中国人", 5); ss.SplitIt();
}
}
转载
你给的程序好像不对吧?
http://community.csdn.net/Expert/TopicView3.asp?id=4971224应该对你有帮助!
String str = "abc我爱山abc东省";
System.out.println(str.substring(1,6));
打印出来的结果是:
bc我爱山
System.out.println(str.substring(1,5));
打印结果是:
bc我爱
前天的时候给一个人面试的时候人家是这么写的,我当时还以为他的答案有问题,结果今天看到帖子自己试了一下,结果竟然是这样的~瀑布汗啊~编码格式~
str.subString(4);
str.subString(5);
按楼主的要求应该都是"啊不才"?