Java 字符串

前言

1、字符

  • 保存一个字符的时候使用 char
类型 数据类型 封装类 尺寸 长度 默认值 范围
字符型 char Character 2 字节 16 位 \u0000 0 ~ 65535
  • char 只能存放一个字符,超过一个字符就会产生编译错误。

    1
    char letter = 'D';
  • 字符 的字面值放在 单引号 中。

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

1.1 字符封装类

  • 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> {

    }
  • 常见字符方法

    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),其里面的内容永远不能改变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、字符
    1. 2.1. 1.1 字符封装类
  3. 3. 2、字符串
    1. 3.1. 2.1 字符串生成器
  4. 4. 3、字符串方法
  5. 5. 4、字符串比较
  6. 6. 5、可变长字符串
隐藏目录