老问题,新提法 (java字符串的截取,中英混合,并有其它各种字符,全角半角等.....) 在网上看了很多,都没有一个完善的解决办法
也就是一个字符串str,我想得到str.substring(0, 10); 只要不将汉字截成两半就可以了!
附加:能跨平台,在windows、linux7.3、linux9.0上都可以通过
呵呵!
问题点数:0、回复次数:15Top
1 楼jonkeyjohns(JonkeyJohns)回复于 2003-12-01 16:03:26 得分 0
我瞎说说
汉字是肯定占两位吗?
如果是的话只要判断最后一个字符是否是字母就可以放心的截取了
如果汉字占一位同上
如果汉字占两位以上,那么就判断最后(位数-1)个字符是否为字母就可以了。Top
2 楼xmancsdn(飞)回复于 2003-12-01 16:13:44 得分 0
一点拙见,可以判断最后一味字符,只要不是字母就加一位,然后就截取吧Top
3 楼caodavid2003(骆驼祥子)回复于 2003-12-01 16:23:42 得分 0
搂主:在string字串一个中汉字、中文标点只占一位,全角输入的字符或阿拉伯数字也占一位,但将它转化为字节却占两位(即两个字节),如果你想确定你的字符串str是否含有英文(除1、2、3...9、0)以外的编码字符或用全角输入法输入的英文字母和阿拉伯数字,你可用将str字串转化为字节数组(Byte[]),然后比较一下转化前后length的大小;如果buf.length>str.length则说明你的字串可能含有全角输入法输入的字符(包括阿拉伯数字)或中文(包扩中文标点),但不能确定Top
4 楼caodavid2003(骆驼祥子)回复于 2003-12-01 16:26:06 得分 0
用java写的代码都是跨平台的,不需要担心平台问题Top
5 楼sunweijia(sunweijia)回复于 2003-12-01 16:36:30 得分 0
你用一下substring(?,?)和getBytes()看一下结果就知道了Top
6 楼niko7(掠水无痕)回复于 2003-12-01 16:41:37 得分 0
/**
* 字符串定长截断函数。
* @param text 需要截断的字符串
* @param textMaxChar 需要留下的长度
* @author niko7@21cn.com
* @return
*/
public String[] CutString(String text, int textMaxChar)
{
int size, index;
String[] returnStringArray = new String[2];
if(textMaxChar <= 0){
returnStringArray[0] = text;
returnStringArray[1] = null;
}
else{
for(size = 0, index = 0; index < text.length() && size < textMaxChar;
index++){
size += text.substring(index, index + 1).getBytes().length;
}
returnStringArray[0] = text.substring(0, index);
returnStringArray[1] = text.substring(index);
}
return returnStringArray;
}Top
7 楼dyroro(粗线条)回复于 2003-12-01 17:26:40 得分 0
“
也就是一个字符串str,我想得到str.substring(0, 10); 只要不将汉字截成两半就可以了!
附加:能跨平台,在windows、linux7.3、linux9.0上都可以通过
”
不清楚楼主问这个问题的做了多少Java的东西,或者说对Java掌握多少。
在JAVA中
String是如何定义的?
Char是如何定义的?
所有这些天生就是UNICODE的,怎么会出现汉字被截成两半的现象?
况且,你仅仅是用一个substring方法而以。。
如果谁用这个方法能够做到将汉字截成两半,那才是当真的了不起了。。。Top
8 楼qljsd(我本善良)回复于 2003-12-01 17:32:32 得分 0
str.substring(0, 10)这种方法永远不会出错!!!!
str.getBytes()有可能!!!Top
9 楼xiaoliang0007(小良_l)回复于 2003-12-01 17:33:05 得分 0
同意楼上的看法
substring方法是不会把汉字截成两半的,因为java用的是UNICODETop
10 楼ngqzmjmj(冷酷)回复于 2003-12-01 19:44:08 得分 0
同意楼上的楼上
在java 中用的是UNICODE汉字和字母是一样的
class a{
public static void main(String[] args)[
String n="我和ni";
String m=n.substring(0,3);
System.out.println("m == "+ m);
}
}
结果为m == 我和n;
java的优点就是跨平台,这点不用超心Top
11 楼xchfriend(xchfriend)回复于 2003-12-02 12:42:39 得分 0
关注!………………………………Top
12 楼xixi99(惜惜)回复于 2003-12-08 10:34:52 得分 0
楼上各位:
你们所讲的方法包括Str.getBytes(),这些我都试过了,不行,在window2k和linux7.3下来出来的结果是不一样的
包括所说的str.substring(),也是会出现乱码的,就是最后一个字符可能会出现乱码
=======================
我想这应该和系统默认的编码方式有关:
ngqzmjmj(冷酷) 应该是在window上面运行的
dyroro(粗线条) java默认的应该是iso8859-1,如果系统是redhat9.0,可能你的程序会出问题
niko7(掠水无痕) 在不同的平台下String.getBytes().length出来的结果是完全不一样的Top
13 楼danceflash(Wine)回复于 2003-12-08 13:01:44 得分 0
.substring()不会有问题的
我现在做的就是在windows下开发
但运行是在Unix下,完全没有问题,substring()这种函数都有用到Top
14 楼xixi99(惜惜)回复于 2003-12-09 11:15:23 得分 0
楼上:
请您用locale在您的unix上看一下你的默认编码是iso885915还是gb13030
再问一下,你的windows和Unix下的字符截取结果一样吧吗??Top
15 楼StarPurple(星紫)回复于 2003-12-09 11:24:20 得分 0
这里N(很)多高手有些地方我看都看不明白~我是新来的请大家多多关照。Top




