String s = "中aaaa华人民共和国" byte[] bytes = s.getBytes(); String newS = new String( bytes, 0, 10 ); 这样可以简单的获得 中aaaa华人 这样的String不过有个问题就是 如果你的中文之中的英文是单数个的话,那么可能有问题 比如 String s = "中aaa华人民共和国" 这样按照上面来截取的话 就会有问题了所以可能要自己一个一个分别处理中文和英文
getBytes();方法取得byte后,留前面的10位就是
rr1.getBytes("utf-8") 转换称byte。其中中文占三个字节。英文占2个字节。
to XKP(低等下人) 我就是这么做的,确实遇到了那个单数个的问题,可是怎么“自己一个一个分别处理中文和英文”啊
这样搞在对中英混合字符串作取长度或截取的动作时: s = new String(s.getBytes("ISO8859-1"), "GB2312"); 用substring截取之后,再转回去 s = new String(s.getBytes("GB2312"), "ISO8859-1");但有一点,不同的字体时,并不是两个英文一个中文的宽度
这样搞在对中英混合字符串作取长度或截取的动作时: s = new String(s.getBytes("ISO8859-1"), "GB2312"); 用substring截取之后,再转回去 s = new String(s.getBytes("GB2312"), "ISO8859-1");但有一点,不同的字体时,并不是两个英文一个中文的宽度
such a easy thing public class c{ //cheat chinese as two char.you can replace "c < 256" to check the char youself static String sbustring2(String org,int beginIndex, int endIndex){ int offset=0; StringBuffer sbf=new StringBuffer(); for(int i=0;i<org.length();i++){ char c=org.charAt(i); if (offset >endIndex)break; if (offset >=beginIndex)sbf.append(c); offset+= c<256?1:2; //System.out.println(c+" "+offset); } return new String(sbf); }public static void main(String[] as){ String a="中华人民共和国"; String b="aaaaaaaaaaaaaa"; String c="中aaaa华人民共和国"; System.out.println(sbustring2(a,0,9)); System.out.println(sbustring2(b,0,9)); System.out.println(sbustring2(c,0,9)); } } } return new String(sbf); }
public class kk{ public static void main( String[] args ){ String s = "aa中华人民共和国"; double lengthCount = 0.0; for( int i = 0; i < s.length(); i++ ){ char c = s.charAt( i ); if( c < 256 ){ lengthCount += 0.5; } else{ lengthCount += 1.0; } } System.out.println( Math.round( lengthCount ) ); } }
byte[] bytes = s.getBytes();
String newS = new String( bytes, 0, 10 );
这样可以简单的获得
中aaaa华人
这样的String不过有个问题就是
如果你的中文之中的英文是单数个的话,那么可能有问题
比如
String s = "中aaa华人民共和国"
这样按照上面来截取的话
就会有问题了所以可能要自己一个一个分别处理中文和英文
转换称byte。其中中文占三个字节。英文占2个字节。
我就是这么做的,确实遇到了那个单数个的问题,可是怎么“自己一个一个分别处理中文和英文”啊
s = new String(s.getBytes("ISO8859-1"), "GB2312");
用substring截取之后,再转回去
s = new String(s.getBytes("GB2312"), "ISO8859-1");但有一点,不同的字体时,并不是两个英文一个中文的宽度
s = new String(s.getBytes("ISO8859-1"), "GB2312");
用substring截取之后,再转回去
s = new String(s.getBytes("GB2312"), "ISO8859-1");但有一点,不同的字体时,并不是两个英文一个中文的宽度
自己一个一个分别处理中文和英文
实在不是什么好办法
就是
每次subString一个,然后判断是不是中文
如果是中文算两个
如果是英文算一个
·············
然后到了第九个byte的时候再判断后面的是不是中文·····我觉得这个办法很笨,唉······
public static void main( String[] args ){
String s = "中aaa华人民共和国";
byte[] bytes = s.getBytes();;
String newS = new String( bytes, 0, 10 );
if( newS.trim().equals( "" )){
newS = new String( bytes, 0, 9 );
}
System.out.println( newS );
}
}
例如一个字符串“aa中华人民共和国”我怎么样才能取得其length是8,而不是9呢?
谢谢您了!!!!
public class c{
//cheat chinese as two char.you can replace "c < 256" to check the char youself
static String sbustring2(String org,int beginIndex, int endIndex){
int offset=0;
StringBuffer sbf=new StringBuffer();
for(int i=0;i<org.length();i++){
char c=org.charAt(i);
if (offset >endIndex)break;
if (offset >=beginIndex)sbf.append(c);
offset+= c<256?1:2;
//System.out.println(c+" "+offset);
}
return new String(sbf);
}public static void main(String[] as){
String a="中华人民共和国";
String b="aaaaaaaaaaaaaa";
String c="中aaaa华人民共和国";
System.out.println(sbustring2(a,0,9));
System.out.println(sbustring2(b,0,9));
System.out.println(sbustring2(c,0,9));
}
}
}
return new String(sbf);
}
public class kk{
public static void main( String[] args ){
String s = "aa中华人民共和国";
double lengthCount = 0.0;
for( int i = 0; i < s.length(); i++ ){
char c = s.charAt( i );
if( c < 256 ){
lengthCount += 0.5;
} else{
lengthCount += 1.0;
}
}
System.out.println( Math.round( lengthCount ) );
}
}