Java 字符串

前言

1、字符

  • 保存一个字符的时候使用 char
类型 数据类型 封装类 尺寸 长度 默认值 范围
字符型 char Character 2 字节 16 位 \u0000 0 ~ 65535
  • char 对应的封装类Character

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    package java.lang;

    /**
    * The {@code Character} class wraps a value of the primitive
    * type {@code char} in an object. An object of type
    * {@code Character} contains a single field whose type is
    * {@code char}.
    *
    * Character information is based on the Unicode Standard, version 6.2.0.
    *
    * @author Lee Boynton, Guy Steele, Akira Tanaka, Martin Buchholz, Ulf Zibis
    * @since 1.0
    */

    public final class Character
    implements java.io.Serializable, Comparable<Character> {

    }
  • char 只能存放一个字符,超过一个字符就会产生编译错误。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Character.isLetter('a')                     // 判断是否为 字母
    Character.isDigit('a') // 判断是否为 数字
    Character.isWhitespace(' ') // 是否是 空白
    Character.isUpperCase('a') // 是否是 大写
    Character.isLowerCase('a') // 是否是 小写

    Character.toUpperCase('a') // 转换为 大写
    Character.toLowerCase('A') // 转换为 小写

    Character.toString('a') // 转换为 字符串
  • 字符 的字面值放在 单引号 中。

  • 字符串 的字面值放在 双引号 中。

2、字符串

  • 字符串即字符的组合,在 Java 中,字符串是一个类,不是基本类型,所以我们见到的字符串都是对象。

  • 字符串 String 被修饰为 final,所以是不能被继承的。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    package java.lang;

    /**
    * The {@code String} class represents character strings. All
    * string literals in Java programs, such as {@code "abc"}, are
    * implemented as instances of this class.
    *
    * @author Lee Boynton, Arthur van Hoff, Martin Buchholz, Ulf Zibis
    * @see java.lang.Object#toString(), java.lang.StringBuffer, java.lang.StringBuilder, java.nio.charset.Charset
    * @since JDK1.0
    */

    public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {

    }
  • 一旦创建好这个字符串,里面的内容 永远 不能改变,String 的表现就像是一个常量。

    1
    2
    3
    4
    5
    6
    7
    8
    String garen = "盖伦";                       // 字面值, 虚拟机碰到字面值就会创建一个字符串对象
    String teemo = new String("提莫"); // 调用 String 的构造方法创建一个字符串对象
    String hero3 = garen + teemo; // 通过 + 加号进行字符串拼接也会创建新的字符串对象

    String str = String.valueOf(123); // 通过数字创建一个字符串对象

    char[] cs = new char[]{'崔', '斯', '特'};
    String hero = new String(cs); // 通过字符数组创建一个字符串对象
  • String 和 StringBuffer 的区别

    • String 是 immutable 的,其内容一旦创建好之后,就不可以发生改变。
    • StringBuffer 是可以变长的,内容也可以发生改变。

2.1 字符串生成器

  • StringBuilder sb = new StringBuilder(10);

    1
    2
    3
    4
    ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐
    | | | | | | | | | |
    └───┴───┴───┴───┴───┴───┴───┴───┴───┘
    0 1 2 3 4 5 6 7 8 9
  • sb.append("QuickRef");

    1
    2
    3
    4
    ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐
    | Q | u | i | c | k | R | e | f | |
    └───┴───┴───┴───┴───┴───┴───┴───┴───┘
    0 1 2 3 4 5 6 7 8 9
  • sb.delete(5, 9);

    1
    2
    3
    4
    ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐
    | Q | u | i | c | k | | | | |
    └───┴───┴───┴───┴───┴───┴───┴───┴───┘
    0 1 2 3 4 5 6 7 8 9
  • sb.insert(0, "My");

    1
    2
    3
    4
    ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐
    | M | y | | Q | u | i | c | k | |
    └───┴───┴───┴───┴───┴───┴───┴───┴───┘
    0 1 2 3 4 5 6 7 8 9
  • sb.append("!");

    1
    2
    3
    4
    ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐
    | M | y | | Q | u | i | c | k | ! |
    └───┴───┴───┴───┴───┴───┴───┴───┴───┘
    0 1 2 3 4 5 6 7 8 9

3、字符串方法

关键字 简介
length 获取字符串的长度
charAt 获取指定位置的字符
toCharArray 获取对应的字符数组
subString 截取从指定位置开始的子字符串
split 根据分隔符进行分隔字符串
trim 去掉首尾空格
toLowerCase
toUpperCase
大小写转换
indexOf 字符或者子字符串(从指定位置开始),第一次出现的位置
lastIndexOf 字符或者子字符串最后出现的位置
contains 是否包含子字符串
replace 替换
replaceAll 替换所有的 s1 为 s2
replaceFirst 只替换第一个 s1 为 s2
concat 连接字符串
isEmpty 是否为空
  • length 方法返回当前字符串的长度,可以有长度为 0 的字符串,即 空字符串

    1
    2
    3
    4
    5
    String name = "盖伦";
    System.out.println(name.length());

    String unknowHero = "";
    System.out.println(unknowHero.length());

4、字符串比较

关键字 简介
== 用于判断是否是同一个字符串对象
equals 字符串内容的比较,必须大小写一致
equalsIgnoreCase 字符串内容的比较,忽略大小写
startsWith 是否以子字符串开始
endsWith 是否以子字符串结束

5、可变长字符串

  • StringBuffer可变长的字符串

  • 改变的原理是 StringBuffer 内部采用了字符数组存放数据,在需要增加长度的时候,创建新的数组,并且把原来的数据复制到新的数组这样的办法来实现。

关键字 简介
append 在最后追加
delete 删除 index1 - index2 之间的字符(包含 index1,不包含 index2)
insert 在 index 这个位置插入 s
reverse 反转
length 长度,内容长度
capacity 容量,总空间
  • String 和 StringBuffer 的区别

    • String 是 immutable 的,其内容一旦创建好之后,就不可以发生改变。
    • StringBuffer 是可以变长的,内容也可以发生改变。
  • StringBuffer 和 StringBuilder 的区别

    • StringBuffer 是线程安全的。
    • StringBuilder 是非线程安全的。
    • 所以当进行大量字符串拼接操作的时候,如果是单线程就用 StringBuilder 会更快些,如果是多线程,就需要用 StringBuffer 保证数据的安全性。
文章目录
  1. 1. 前言
  2. 2. 1、字符
  3. 3. 2、字符串
    1. 3.1. 2.1 字符串生成器
  4. 4. 3、字符串方法
  5. 5. 4、字符串比较
  6. 6. 5、可变长字符串
隐藏目录