Java常见疑难问题-字符串4


19. char类型相加
System.out.println(‘a' + ‘A');//162
上面的结果不是 aA ,而是 162。
当且仅当+操作符的操作数中至少有一个是String类型时,才会执行字符串连接操作;否则,
执行加法。如果要连接的数值没有一个是字符串类型的,那么你可以有几种选择:预置一个
空字符串(”” + ‘a' + ‘A');将第一个数值用String.valueOf()显示地转换成一个字符串
(String.valueOf(‘a') + ‘A');使用一个字符串缓冲区(sb.append(‘a');sb.append(‘A'););或者如
果使用的是JDK5.0,可以用printf(System.out.printf(“%c%c”,'a','A'));
20. 程序中的Unicode转义字符
//u0022是双引号的Unicode编码表示
System.out.println(“au0022.length() + u0022b”.length());// 2

Unicode编码表示的字符是在编译期间就转换成了普通字符,它与普通转义字符(如:”)
是不一样的,它们是在程序被解析为各种符号之后才处理转义字符序列。
21. 注释中的Unicode转义字符
如果程序中含有以下的注释:// d:autil ,程序将不能编译通过,原因是u后面跟的不是
四个十六进制数字,但编译器在编译时却要把u开头的字符的字符看作是Unicode编码表示
的字符。

所以要注意:注释中也是支持Unicode转义字符的。

另外一个是不能在注释行的中间含有 u000A 表示换行的Unicode字符,因为这样在编
译时读到 u000A 时,表示行结束,那么后面的字符就会当作程序代码而不在是注释了。
22. 与Linux上的行结束标示符
String line = (String)System.getProperties().get(“line.separator”);
for(int i =0; i System.out.println((int)line.charAt(i));
}

上运行结果:
13
10
在Linux上运行的结果:
10

平台上,行分隔符是由回车(
)和紧其后的换行(
)组成,但在Unix平台
上通常使用单独的换行(
)表示。
23. 输出0-255之间的ISO8859-1符
byte bts[] = new byte[256];
for (int i = 0; i bts[i] = (byte) i;
}
// String str = new String(bts,”ISO8859-1″);//正确的做法
String str = new String(bts);//使用默认编码方式编码(XP GBK)
for (int i = 0, n = str.length(); i System.out.print((int) str.charAt(i) + ” “);
}
上面不会输出0-255之间的数字串,正确的方式要使用new String(bts,” ISO8859-1″) 方式来
解码。

ISO8859-1是唯一能够让该程序按顺序打印从0到255的整数的缺少字符集,这也是唯一在
字符和字节之间一对一的映射字符集。

通过获取的默认编码方式:
System.getProperty(“file.encoding”);//jdk1.4或之前版本
.nio.charset.Charset.defaultCharset();//jdk1.5或之后版本
24. String的replace()与replaceAll()
System.out.println(“.”.replaceAll(“.class”, “\$”));
上面程序将 . 替换成 $,但运行时报,主要原replaceAll的第二参数有两个字符( $)
是特殊字符,具有特殊意思(用来转移 与 $,$后面接数字表示反向引用)。另外,replaceAll
的第一参数是正则表达式,所以要注意特殊字符,正确的作法有以下三种:
System.out.println(“.class”.replaceAll(“\.”, “\\\$”));
System.out.println(“.class”.replaceAll(“\Q.\E”, “\\\$”));
System.out.println(“.class”.replaceAll(Pattern.quote(“.”), Matcher.quoteReplacement(“\$”)));

API对、Q与E的解释:
引用(转义)下一个字符
Q引用所有字符,直到 E
E结束从 Q 开始的引用

JDK5.0新增了一些解决此的新方法:
java.util.regex.Pattern.quote(String s):使用Q与E将参数引起来,这些被引用的字符
串就是一般的字符,哪怕含有正则式特殊字符。
java.util.regex.Matcher.quoteReplacement(String s):将与$转换成能应用于replaceAll第二个
参数的字符串,即可作为替换内容。

String的replace(char oldChar, char newChar)方法却不使用正则式,但它们只支持字符,而
不是字符串,使用起来受限制:
System.out.println(“.”.replace(‘.','\'));//能将 . 替换成
System.out.println(“.”.replace(‘.','$')); //能将 . 替换成 $

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 智乐兔
转载请注明:转自《Java常见疑难问题-字符串4
本文地址:https://www.zhiletu.com/archives-237.html
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!

在线客服
在线客服 X

售前: 点击这里给我发消息
售后: 点击这里给我发消息

智乐兔官微