Java 字符串


字符串是一个由字符组成的序列。字符串类String是Java中最常用的类。


创建字符串对象

创建字符串对象有两种方式:

  • 通过给字符串变量赋值一个String字面量的方式,如String s = "Hello";
  • 通过new和向构造函数传初始值的方式,如String s = new String(new char[]{'a', 'b'});

下面是创建字符串对象的例子。

public class StrCreate {
    public static void main(String[] args) {
        String str = "hello";
        String s = new String(new char[]{'a', 'b'});
        System.out.println(str);    // hello
        System.out.println(s);        // ab
    }
}


String对象是不可变的,String对象创建后不能再更改。

字符串长度和字符串是否为空

下面是字符串长度和字符串是否为空的例子。

public class StrLenEmpty {
    public static void main(String[] args) {
        String str = "hello";
        String str2 = "中文";
        String s2 = "";
        String s3 = null;

        System.out.println(str.length());        // 5
        System.out.println(str2.length());    // 2

        System.out.println(str.isEmpty());    // false
        System.out.println(s2.isEmpty());        // true

        //System.out.println(s3.length());        // java.lang.NullPointerException
    }
}

如果一个对象的值为null,调用对象的任何方法都会抛出空指针例外NullPointerException,如上面例子中的s为null,s.length()会抛出空指针例外。

合并字符串

字符串合并有两种方式:

  • 调用字符串对象的方法concat()。
  • 通过+运算符的方式。

下面是合并字符串的例子。

public class StrConcat {
    public static void main(String[] args) {
        String str = "hello";
        String s = str + " world!";
        String s2 = 2 + " apples";
        String s3 = "abc " + null + " 123 ";

        System.out.println(s);    // hello world!
        System.out.println(s2);    // 2 apples
        System.out.println(s3);    // abc null 123
        System.out.println("ab".concat("cd"));    // abcd
    }
}

+运算符合并字符串的操作数可以是任何对象。操作数如果不是字符串对象,会被转换成字符串,再合并。值为null的对象被转成字符串"null"。

如果多个字符串要合并成一个字符串,使用StringBuilder类可以提高效率。

创建格式化字符串

根据格式和参数生成格式化后的字符串。System.out.printf()也可以直接输出格式化后的字符串。

下面是创建格式化字符串的例子。

public class StrFormat {
    public static void main(String[] args) {
        String str = String.format("There are %d apples on the %s", 2, "table");
        System.out.println(str);    // There are 2 apples on the table
        System.out.printf("1 + 1 = %d", 1 + 1);    // 1 + 1 = 2
    }
}

查找字符串

在字符串对象中查找指定的子字符串第一次出现或最后一次出现的位置,如果没找到,返回-1。

下面是查找字符串的例子。

public class StrFind {
    public static void main(String[] args) {
        String str = "the cat is chasing the mouse";
        int idx = str.indexOf("the");
        int lastIdx = str.lastIndexOf("the");
        int notFind = str.indexOf("dog");

        System.out.println("idx = " + idx);    // 0
        System.out.println("lastIdx = " + lastIdx);    // 19
        System.out.println("notFind = " + notFind);    // -1
    }
}

替换字符串

将字符串对象中指定子字符串替换成另一个字符串。子字符串可以为正则表达式。

下面是替换字符串的例子。

public class StrReplace {
    public static void main(String[] args) {
        String str = "The cat is chasing the mouse";
        String str2 = str.replaceAll("[T|t]he", "a");
        String str3 = "the apple and the pear".replaceFirst("the", "a");

        System.out.println(str2);    // a cat is chasing a mouse
        System.out.println(str3);    // a apple and the pear
    }
}