Java解惑(2)——字符之谜

在处理字符或字符串时,要牢记下面的几点

(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值)的空字符串缓冲区。

原文地址:https://www.cnblogs.com/alexrain/p/1990590.html