6.1 String类

代码中,每个字符串都是String类的实例,可以通过String类的成员进行一系列的操作。下面介绍一些关于字符串的常见操作。

6.1.1 字符串的运算与比较

字符串的运算,最常见的就是通过+运算符来连接多个字符,如下面的代码所示。

比较两个字符串内容是否相同时,可以使用String对象的equals()方法,如下面的代码所示。

比较两个字符串时,会区分字母的大小写。如果需要忽略大小写,可以将字符串统一转换为大写或小写后再进行比较。

6.1.2 常用方法

字符串中的字符序列,可以使用从0开始的索引来访问,第一个字符的索引为0,第二个字符的索引为1,以此类推。获取字符串中指定位置的字符时,可以使用charAt()方法,如下面的代码所示。

indexOf()方法在字符串中查找指定的内容,如果找到则返回第一次出现的索引值,如果没有找到则返回-1,如下面的代码所示。

相关的方法是lastIndexOf()方法,它返回指定内容最后一次出现的索引值,如下面的代码所示。

需要截取字符串内容时,可以使用substring()方法,如下面的代码所示。

示例中,请注意substring()方法的参数使用,第一个参数指定开始截取的索引位置,当不指定第二个参数时,会从指定位置截取全部内容。第二个参数指定截取内容结束位置的后一个索引值,换一个方式说,当使用substring(i, n)方法截断字符串内容时,会截取从索引i开始的n-i个字符。

分隔字符串时使用split()方法,如下面的代码所示。

代码执行结果如图6-1所示。

split()方法中,参数指定分隔内容,可以是字符串,也可以使用正则表达式内容,方法会返回分隔后的字符串数组。第8章会详细讨论数组和集合的应用,本章稍后会有关于正则表达式的讨论。

此外,split()方法还可以使用第2个参数,其功能是指定分隔的成员数量,如下面的代码所示。

代码执行结果如图6-2所示。

图6-1 分隔字符串

图6-2 分隔指定数量的字符串

当判断字符串是否以指定内容开始时(字符串前缀),使用startsWith()方法,如下面的代码所示。

相应地,当判断字符串是否以指定内容(后缀)结束时,使用endsWith()方法。

trim()方法用于删除字符串开始位置和结束位置的空白字符(如空格等),并返回新的字符串对象。

toUpperCase()方法将字符串中的字母全部转换为大写,并返回新的字符串对象。

toLowerCase()方法将字符串中的字母全部转换为小写,并返回新的字符串对象。

valueOf()方法有多个重载版本,用于将不同类型的数据转换为String类型。

format()方法的功能比较强大,可以将多种不同类型的数据组合为字符串。方法中,第一个参数为主内容字符串,其中可以包含一系列不同类型数据的占位符,从第二个参数开始的数据则需要一一对应这些占位符。其中,常用的占位符有以下几个。

□ %b,显示布尔数据。

□ %d,显示整数。

□ %x,显示十六进制数。

□ %o,显示八进制数。

□ %f,显示浮点数,可以指定小数位数量,如%.2f指定显示两位小数。

□ %s,显示字符串。

下面的代码演示了format()方法的使用。

    public static void main(String[] args) {
        String name = "Tom";
        int age = 16;
        double height = 1.78;
        String s = String.format("%s今年%d岁,身高%.2f米",name,age,height);
        System.out.println(s);
    }

代码执行结果如图6-3所示。

图6-3 格式化字符串

6.1.3 将字符串转换为其他类型

要把字符串转换为基本数据类型的包装对象,可以使用这些包装类中定义的parseXXX()方法,如下面的代码所示。

    public static void main(String[] args) {
        String s = "123";
        System.out.println(Integer.parseInt(s));
        System.out.println(Float.parseFloat(s));
    }

代码执行结果如图6-4所示。

需要说明的是,如果字符串的内容不能正确地转换为目标类型,就会产生异常,如下面的代码所示。

图6-4 把字符串转换为基本数据类型

    public static void main(String[] args) {
        String s = "ddd";
        int x = Integer.parseInt(s);     // 错误
        System.out.println(x);
    }

实际应用中,若要无异常地获取目标类型数据,可以封装自己的转换代码。接下来,在CC类中封装一些常用的方法,如下面的代码(CC.java文件)所示。

实际应用中,可以通过类似下面的代码使用这些方法。

    public static void main(String[] args) {
        String s1 = "ddd";
        String s2 = "12.3";
        System.out.println(CC.toInt(s1));
        System.out.println(CC.toInt(s2));
        System.out.println(CC.toDbl(s2));
    }

代码执行结果如图6-5所示。

代码中,如果字符串的内容不能成功转换为目标类型数据,就会返回目标类型的默认值,这样可以保证任何情况下都有一个可用的值。当然,也可以在项目中根据实际情况进行处理。

图6-5 封装类型转换方法