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

  • 相关阅读:
    (HDOJ 2034)人见人爱AB
    (UVa 100) The 3n + 1 problem
    (HDOJ 2099)整除的尾数
    (UESTCOJ 1004)8球胜负(eight)
    asp.net中对数据库表插入null空值的问题
    利用模版生成html页
    如何取得IP/用户名等信息
    SQL SERVER的数据类型
    在IIS与.net框架中配置中把扩展名.aspx改成自定义的扩展名.mspx
    c#中什么情况下用(int)什么情况下用Convert.ToInt32?
  • 原文地址:https://www.cnblogs.com/alexrain/p/1990590.html
Copyright © 2020-2023  润新知