public static String change(String str) {
String outStr = "";
String test = "";
byte[] code = null; for (int i = 0; i < str.length(); i++) {
try {
test = str.substring(i, i + 1);
code = test.getBytes("unicode");
} catch (Exception e) {
e.printStackTrace();
}
if (code[3] != -1) {
code[2] = (byte) (code[2] + 32);
code[3] = 0; try {
outStr = outStr + new String(code, "unicode");
} catch (Exception e) {
return str;
}
} else {
outStr = outStr + test;
}
}
return outStr;
}以上这段代码是网上的..谁能解释一下,test.getBytes("unicode")后得到的byte[]类型的code,每一个都代表什么意思??code[0]是什么意思?
code[1]什么意思?
code[2]什么意思?
code[3]什么意思?code[3] != -1 这又是什么意思???
code[2] = (byte) (code[2] + 32);这又是什么意思???
String outStr = "";
String test = "";
byte[] code = null; for (int i = 0; i < str.length(); i++) {
try {
test = str.substring(i, i + 1);
code = test.getBytes("unicode");
} catch (Exception e) {
e.printStackTrace();
}
if (code[3] != -1) {
code[2] = (byte) (code[2] + 32);
code[3] = 0; try {
outStr = outStr + new String(code, "unicode");
} catch (Exception e) {
return str;
}
} else {
outStr = outStr + test;
}
}
return outStr;
}以上这段代码是网上的..谁能解释一下,test.getBytes("unicode")后得到的byte[]类型的code,每一个都代表什么意思??code[0]是什么意思?
code[1]什么意思?
code[2]什么意思?
code[3]什么意思?code[3] != -1 这又是什么意思???
code[2] = (byte) (code[2] + 32);这又是什么意思???
http://www.360doc.com/content/081015/09/61497_1765862.html.getBytes("unicode")这个unicode有统一编码,但是还有子集,在不同的平台下面是不同的.
String temp = "a"; try { byte[] unicodes = temp.getBytes("Unicode"); System.out.println("unicodes=" + unicodes.length);
for (int i = 0; i < unicodes.length; i++) {
System.out.println(unicodes[i]);
} unicodes = temp.getBytes("UnicodeLittleUned");
System.out.println("unicodes=" + unicodes.length);
for (int i = 0; i < unicodes.length; i++) {
System.out.println(unicodes[i]);
}
unicodes = temp.getBytes("UnicodeBigUned");
System.out.println("unicodes=" + unicodes.length);
for (int i = 0; i < unicodes.length; i++) {
System.out.println(unicodes[i]);
} } catch (UnsupportedEncodingException e) {
e.printStackTrace();
}输出结果:unicodes=4
-1
-2
97
0
unicodes=2
97
0
unicodes=2
0
97
String temp2 = "/"; try { byte[] unicodes1 = temp1.getBytes("unicode"); System.out.println("unicodes1=" + unicodes1.length);
for (int i = 0; i < unicodes1.length; i++) {
System.out.println(unicodes1[i]);
}
byte[] unicodes2 = temp2.getBytes("unicode"); System.out.println("unicodes2=" + unicodes2.length);
for (int i = 0; i < unicodes2.length; i++) {
System.out.println(unicodes2[i]);
} }catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
怪怪!!全角和半角的/的到的结果是一样的。
unicodes1=4
-1
-2
47
0
unicodes2=4
-1
-2
47
0
最后一位都是0,看样子第二位都的加上32,很明显有问题,看不懂。希望高人解答,我嘛坐一下顺风车。
这句是把此字符串分割成一个个字符,
code = test.getBytes("unicode");
得到次字符的unicode编码,赋给bytes数组
举个例子,比如“a”,unicode默认内存编码表示为(Little Endian):FF FE 97 00;
储存成二进制为:11111111 11111110 01100001 00000000;
之后提取code[i]得到的就是:-1 -2 97 0;
至于为什么是-1,-2,主要因为java语言二进制数采用的是补码形式。
有时间可以自己研究下。