字符串类是一个比较特殊的类,它用于保存字符串。我们知道,基本类型char可以保存一个2字节的Unicode字符,而字符串则是一系列字符的序列(在C中就是一个字符数组)Java中没有字符串这种基本类型,因此只能使用类来进行定义。注意,字符串中的字符一旦确定,无法进行修改,只能重新创建。

String 类

每个用双引号括起来的字符串,都是String类型的一个实例对象:

public static void main(String[] args) {
    String str = "Hello World!";
    String str = new String("Hello World!");
}

如果是直接使用双引号创建的字符串,如果内容相同,为了优化效率,那么始终都是同一个对象, 即通过 == 判断返回 true。 但是如果我们使用构造方法主动创建两个新的对象,那么就是不同的对象了。

因此如果要判断两个字符串是否相等, 需要用 String类重载的 equals 方法判断。

常用方法

.substring(a,b): 分割字符串, 返回下标在 [0,3) 的新的子串对象。

.split(str): 将字符串根据 str 进行切割多份, 不会保留 str。

.toCharArray(): 返回 char 字符数组

StringBuilder 类

字符串支持使用++=进行拼接操作。

但是拼接字符串实际上底层需要进行很多操作,如果程序中大量进行字符串的拼接, 最好是使用 StringBuilder 代替单纯的 String。实际上编译器也会优化成 StringBuilder。

public static void main(String[] args) {
    StringBuilder builder = new StringBuilder();   //一开始创建时,内部什么都没有
    builder.append("AAA");   //我们可以使用append方法来讲字符串拼接到后面
    builder.append("BBB");
    StringBuilder builder = new StringBuilder("AAABBB"); //在构造时也可以指定初始字符串 
    builder.delete(2, 4); //删除2到4这个范围内的字符
    System.out.println(builder.toString());   //当我们字符串编辑完成之后,就可以使用toString转换为字符串了
}

正则表达式匹配

想要判断字符串是不是邮箱的格式:

public static void main(String[] args) {
    String str = "aaaa731341@163.com";
      //假设邮箱格式为 数字/字母@数字/字母.com
}

可以通过正则表达式来判断。通过调用 .matches(pattern) 来进行匹配。

匹配一个邮箱的正则表达式就是:

/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

对应代码:

public static void main(String[] args) {
        String email = "2957604083@qq.com";
        System.out.println(
                email.matches("^[a-z0-9A-Z]+[- | a-z0-9A-Z . _]+@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-z]{2,}$"));
 
    }