java 中汉字字符长度的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 飘叶
  • 开始时间 开始时间

飘叶

Unregistered / Unconfirmed
GUEST, unregistred user!
如 s='汉字' 在DELPHI中 length(s) 为 4,而在eclipse中 s.length() 为 2
如何设置,才能使 s.length() 为 4
 
如 s='汉字' 在DELPHI中 length(s) 为 4,而在eclipse中 s.length() 为 2
如何设置,才能使 s.length() 为 4
 
Java 用的是Unicode编码,正常的撒,你想怎么设置?!
不是2才不对了,S='AB'你再看看是多少?
 
public class Test{
public static void main(String[] args){
String s1 = new String("abc汉字");
System.out.println("Len(s1) = "
+ s1.getBytes().length);
}
}
 
1楼对,Java用的是Unicode编码,中文与英文字符是一样的。
 
toByte
后再计算长度。
 
xianguo,如果String s1 = new String("abc汉字");那么上次的那个程序
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3211744
如何修改才能与DELPHI中一样的结果?
 
//java中的Byte范围是 -128~127,不知道怎么转成无符号型
//所以绕了弯路 ( 即这一段: if (x<0) x = 256+x )
public class Test{
public static void main(String[] args){
/*
String s1 = new String(&quot;abc汉字123&quot;);
System.out.println(&quot;Len(s1) = &quot;
+ s1.getBytes().length);
*/
int x =0;
int n2 = 1 ;
int n1 = 8892636;
String s1 = new String(&quot;AB测试00500100291C&quot;);
String s2 = new String(&quot;QW汉字TYUIO7&quot;);
String s4 = new String(&quot;&quot;);
String s5 = new String(&quot;&quot;);
String s6 = new String(&quot;&quot;);
String zjs = new String(&quot;052&quot;);
System.out.println(&quot;s1 = &quot;
+ s1);
System.out.println(&quot;s2 = &quot;
+ s2);
for (int i=1;i<=s1.getBytes().length;i++){
x = s1.getBytes()[i-1];
if (x<0) x = 256 + x;
System.out.println(&quot;s1.getBytes()[&quot;
+ (i-1) + &quot;] = &quot;
+ x);

n2 = Math.abs((x * n2 + 0xf48)) % 1000000;
}
System.out.println(&quot;n2 = &quot;
+ n2);

for (int i=2;
i<=s2.getBytes().length;
i++){
x = s2.getBytes()[i-1];
if (x<0) x = 256 + x;
System.out.println(&quot;s2.getBytes()[&quot;
+ (i-1) + &quot;] = &quot;
+ x);

n2 = Math.abs((x* n2 + 0x0F83)) % 1000000;
}
System.out.println(&quot;n2 = &quot;
+ n2);

n2 = 10705672 + Math.abs((n2+n1) *(s1.getBytes().length + s2.getBytes().length));
System.out.println(&quot;n2 = &quot;
+ n2);
s5 = zjs + String.format(&quot;%d&quot;, n2).substring(0, 6);
System.out.println(&quot;s5 = &quot;
+ s5);
n2 = Integer.parseInt(s5);
System.out.println(&quot;n2 = &quot;
+ n2);
n2 = 137964276 + Math.abs(((n2 / 181) * 196) ^ 39694322);
System.out.println(&quot;n2 = &quot;
+ n2);
s1 = String.format(&quot;%d&quot;, n2).substring(0, 8);
s2 = &quot;73461852&quot;;
System.out.println(&quot;s1 = &quot;
+ s1);
System.out.println(&quot;s2 = &quot;
+ s2);
for (int i=1;
i<=8;
i++){
x = s2.getBytes()[i-1];
if (x<0) x = 256 + x;
s4 = s4 + s1.charAt(x- (int)('1'));
}
System.out.println(&quot;s4 = &quot;
+ s4);
s6 = s4 + '-' + s5;
System.out.println(&quot;s6 = &quot;
+ s6);
//答案 28741985-052297382
}
}
 
奇怪!eclipse竟然不支持任意截字符串substring(4, 2);只能从头开始截substring(0, 2);
各位有什么高招?
 
substring(int begin
Index, int endIndex)
Returns a new string that is a substring of this string.
 
注意从0开始
 
到 http://java.sun.com/ 上下载一份API说明
 
用getBytes()处理汉字还是解决不了,因为这在电脑上运行正常,但程序在手机上运行时,任一个汉字getBytes()后只得到一个63,而charAt(i)则可以得到与电脑一样的一个汉字为五位数的值
 
有点思路了,JAVA中charAt()的反函数是什么?(哪里有JAVA的函数中文说明?)
我在Motorola SDK v5.2 for J2ME中用模拟器中执行时,输入汉字显示为乱码时,getBytes()竟然可以取得正常值,因此是否可以这样:
中文--->charAt()---->charAt()的反函数---->getBytes()
 
chatAt取字符串中指定位置的字符
getBytes取ASCII码(如果为汉字,则分别取高8位或低8位<合并起来就是UniCode>)
 
Form v = new Form(&quot;Test&quot;);
String s1 = new String(&quot;中&quot;);
int x =0;
x = (s1.getBytes()[0]);
f.append(String.valueOf(x));//电脑中显示为 -42 手机中显示为 63
x =s1.charAt(0);
f.append(String.valueOf(x));
//电脑、手机都显示为 20013
=========因此我想把20013变换回汉字,再getBytes,会不会手机中也显示为 -42
 
//☆、取汉字的Unicode码
public static String Chinese2Unicode(char ch){
int i;
i = (int)ch;
return Integer.toHexString(i).toUpperCase();
}
//☆、取Unicode码对应的字符
public static String Unicode2Chinese(String str){
int i=0;
i = Integer.parseInt(str, 16);
return Character.toString(((char)i));
}
 
Character.toString(((char)i));编译不了
 
//☆、取Unicode码对应的字符
public static String Unicode2Chinese(String str){
int i=0;
i = Integer.parseInt(str, 16);
return String.valueOf((char)i);
}
这样可以编译了,但始终解决不了手机上的汉字getBytes()问题
 
ASCII码与UniCode码是什么关系?能否用数学的方法计算出来?
如果是英文数学,UniCode码是十六进制,ASCII码是十进制,它们是相等的,
如 A 的ASCII码是65;UniCode码是41
Z 的ASCII码是90;UniCode码是5A
0 的ASCII码是48;UniCode码是30
9 的ASCII码是57;UniCode码是39
但中文就不知是什么关系了
如 “中” 的ASCII码是214、208;UniCode码是4E2D
“文” 的ASCII码是206、196;UniCode码是6587
“字” 的ASCII码是215、214;UniCode码是5B57
“闭” 的ASCII码是177、213;UniCode码是95ED
“问” 的ASCII码是206、202;UniCode码是95EE
 
后退
顶部