在处理字符或字符串时,要牢记下面的几点
(1)若想将一个char数组转换成一个字符串,就要调用String.valueOf(char[])方法。
比如char[] numbers={'1','2','3'};
如果直接使用System.out.println("numbers:"+numbers);将得不到我们想要的结果。
解决方法:System.out.println("numbers:"+String.valueOf(numbers));
或者:System.out.print("numbers:");
System.out.println(numbers);
(2)在比较两个字符串时,应该优先使用equals方法而不是==操作符,除非需要比较的是对象的标识而不是对象的值。
如果两个final String都是用相同的常量表达式来初始化的,那么它们的==运算结果为true
例如:final String a="ha10";final String b="ha10"; System.out.println(a==b);结果为true
而:final String a="ha10";final String b="ha"+a.substring(2);System.out.println(a==b);结果为false,因为b不是用常量表达式来初始化的。
(3)除非万不得已,否则不要使用Unicode转义字符,注释中也不要用。即注释中也不要含有\u
(4)在将一个byte序列转换成一个String时,总是会使用一个字符集,不管是否显式地指定了它。系统默认的String(byte[])使用了缺省字符集,可能导致未知结果。
通常我们需要显式指定字符集,例如:
byte bytes[]={'0','1','2'};
String str=new String(bytes,"ISO-8859-1");
(5)慎用点号.
String str="com.jp.chapter1.AboutExpressions";
System.out.println(str.replaceAll(".", "@"));这段代码的本意是用@替换字符串中所有的“.”,结果却输出@@@@@@@@@@@@@@@@@@@,因为正则表“.”可以匹配任何单个字符。
解决方法1:使用转义字符System.out.println(str.replaceAll("\\.", "@"));因为反斜杠\本身必须要用两个反斜杠来转义,所以用了2个\\
解决方法2:使用静态方法java.util.regex.Pattern.quote:System.out.println(str.replaceAll(Pattern.quote("."), "@"));
(6)关于StringBuffer
它有3个构造函数,无参的、String作为参数的、int作为参数的。
如果使用StringBuffer sb=new StringBuffer('M');相当于使用了int参数的构造函数,将得到一个具有初始容量77(M的ascii值)的空字符串缓冲区。