20210114 java.lang.String

java.lang.String

基本信息

  • public final class String implements java.io.Serializable, Comparable<String>, CharSequence
  • rt.jar
  • 引入版本:1.0

继承关系

img

静态常量

静态常量
Comparator<String> CASE_INSENSITIVE_ORDER
大小写无关的字符串排序器,一个对 String 对象进行排序的 Comparator,作用与 compareToIgnoreCase 方法相同

构造方法

构造方法
String()
String(String original)
String(char value[])
String(char value[], int offset, int count)
String(int[] codePoints, int offset, int count)
String(byte bytes[])
String(byte bytes[], String charsetName)
String(byte bytes[], Charset charset)
String(byte bytes[], int offset, int length)
String(byte bytes[], int offset, int length, String charsetName)
String(byte bytes[], int offset, int length, Charset charset)
String(StringBuffer buffer)
String(StringBuilder builder)

公共方法

继承方法

java.lang.CharSequence

继承方法
IntStream chars()
代码单元流
IntStream codePoints()
代码点流

注意区分代码单元和代码点

  • 一个代码单元就是一个 char,一个代码点就是 Unicode 里的一个字符,对应一个编号数字
  • 一个代码点可能对应 1-2 个代码单元

重写父类方法

java.lang.Object

重写父类方法
boolean equals(Object anObject)
先比较地址,后比较字符串中的字符
int hashCode()

实现接口方法

java.lang.CharSequence

实现接口方法
int length()
char[] 数组长度
char charAt(int index)
CharSequence subSequence(int beginIndex, int endIndex)
获取字符串子串,参数索引 包前不包后
String toString()

java.lang.Comparable

实现接口方法
int compareTo(String anotherString)
char 数组层面的大小比较,在 ASCII 码里,数字小于大写字母,小于小写字母
返回值 0 则相等,或者小于 0 和大于 0,不一定是 -1 和 1

静态方法

静态方法
String join(CharSequence delimiter, CharSequence... elements)
String join(CharSequence delimiter, Iterable<? extends CharSequence> elements)

拼接多个字符串的方法,底层使用 java.util.StringJoiner
String format(String format, Object... args)
String format(Locale l, String format, Object... args)
使用 java.util.Formatter 做格式化操作
String valueOf(Object obj)
String valueOf(char data[])
String valueOf(char data[], int offset, int count)
String valueOf(boolean b)
String valueOf(char c)
String valueOf(int i)
String valueOf(long l)
String valueOf(float f)
String valueOf(double d)
null 返回 "null",boolean 返回 "true" 或 "false"
String copyValueOf(char data[])
String copyValueOf(char data[], int offset, int count)
跳过 offset 个,获取长度为 count 的子串

实例方法

实例方法
boolean isEmpty()
int codePointAt(int index)
这里的 index 指的是 char[] 的下标
int codePointBefore(int index)
int codePointCount(int beginIndex, int endIndex)
Unicode 字符个数
int offsetByCodePoints(int index, int codePointOffset)
void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin)
返回值为 void,但是把值设置在了参数 char dst[]
byte[] getBytes()
byte[] getBytes(String charsetName)
byte[] getBytes(Charset charset)
chars() 方法不需要指定编码,这里的编码是从字符转到字节的转码编码
boolean contentEquals(StringBuffer sb)
boolean contentEquals(CharSequence cs)
CharSequence 的子类进行 char 级别的比较
boolean equalsIgnoreCase(String anotherString)
大小写无关的相等比较
int compareToIgnoreCase(String str)
大小写无关的字符串大小比较
boolean regionMatches(int toffset, String other, int ooffset, int len)
boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)
字符串局部范围比较
boolean startsWith(String prefix)
boolean startsWith(String prefix, int toffset)
判断是否以某个字符串开头
boolean endsWith(String suffix)
int indexOf(int ch)
int indexOf(int ch, int fromIndex)
int indexOf(String str)
int indexOf(String str, int fromIndex)
判断时包含 fromIndex 索引位置的字符
int lastIndexOf(int ch)
int lastIndexOf(int ch, int fromIndex)
int lastIndexOf(String str)
int lastIndexOf(String str, int fromIndex)
这里的 fromIndex 是指fromIndex 位置向前查找
String substring(int beginIndex)
String substring(int beginIndex, int endIndex)
索引位置包前不包后
boolean matches(String regex)
正则匹配字符串,使用的是 java.util.regex.Pattern
boolean contains(CharSequence s)
使用 indexOf 方法判定的
String concat(String str)
连接字符串
String replace(char oldChar, char newChar)
String replace(CharSequence target, CharSequence replacement)
非正则匹配,匹配的是文本,替换字符串中所有匹配到的内容
String replaceFirst(String regex, String replacement)
正则匹配,替换第一个匹配到的
String replaceAll(String regex, String replacement)
正则匹配,替换字符串中所有匹配到的内容
String[] split(String regex)
String[] split(String regex, int limit)
正则匹配,切割字符串
String toLowerCase()
String toLowerCase(Locale locale)
String toUpperCase(Locale locale)
String toUpperCase()
String trim()
删除前后小于 \u0020(ASCII 中的空格,32) 的字符
char[] toCharArray()
返回复制而来的字符数组
String intern()
如果字符串常量池中存在相同的字符串,从字符串中获取,如果不存在,存入字符串常量池

示例代码

@Test
public void testAll() {
    String s = "ab汉\uD835\uDD6Bcd";
    System.out.println("s == " + s);    // s == ab汉𝕫cd

    // 0. 构造方法
    System.out.println(new String(s.codePoints().toArray(), 1, 4)); // b汉𝕫c
    System.out.println(new String(s.toCharArray(), 1, 4));  // b汉

    System.out.println("1. 继承自 CharSequence 的方法:");
    s.chars().forEach(c -> System.out.print((char) c + "\t")); // a b   汉   ?   ?
    System.out.println();
    s.codePoints().forEach(i -> System.out.print(new String(Character.toChars(i)) + "\t")); // a	b	汉	𝕫

    System.out.println("2. 实现 CharSequence 的方法:");
    System.out.println(s.length()); // 7
    System.out.println(s.subSequence(0, 2));    // ab

    System.out.println("3. 静态方法:");
    System.out.println(String.join(",", "a", "b", "c"));    // a,b,c
    System.out.println(String.join(",", Arrays.asList("a", "b", "c"))); // a,b,c
    System.out.println(String.join(",", new String[]{"a", "b", "c"}));  // a,b,c

    System.out.println(String.format("%4$2s %3$2s %2$2s %1$2s ", "a", "b", "c", "d"));  // d  c  b  a
    System.out.println(String.format(Locale.US, "Duke's Birthday: %1$tm %1$te,%1$tY", LocalDateTime.now()));    // Duke's Birthday: 01 14,2021

    System.out.println(String.copyValueOf("abcde".toCharArray()));  // abcde
    System.out.println(String.copyValueOf("abcde".toCharArray(), 1, 2));    // bc

    System.out.println("4. 实例方法:");
    System.out.println(new String(Character.toChars(s.codePointAt(3))));    // 𝕫
    System.out.println(new String(Character.toChars(s.codePointBefore(5))));    // 𝕫
    System.out.println(s.codePointCount(0, s.length()));    // 6
    System.out.println(s.offsetByCodePoints(0, 3) + "\t" + s.offsetByCodePoints(0, 4) + "\t" + s.offsetByCodePoints(0, 5)); // 3	5	6

    char[] chars = new char[10];
    s.getChars(0, 5, chars, 0);
    System.out.println(new String(chars));  // ab汉𝕫

    System.out.println("============");
    System.out.println(Charset.defaultCharset());   // UTF-8
    System.out.println(s.getBytes().length);    // 11
    System.out.println(s.getBytes(StandardCharsets.UTF_16).length); // 16
    s.chars().forEach(c -> System.out.print(new String(new char[]{(char) c}).getBytes().length + "\t"));    // 1	1	3	1	1	1	1
    System.out.println();

    System.out.println("aabbcc".regionMatches(1, "ab", 0, 2));  // true
    System.out.println("aabbcc".regionMatches(true, 1, "Ab", 0, 2));    // true
    System.out.println("aabbcc".regionMatches(false, 1, "Ab", 0, 2));   // false

    System.out.println(s.startsWith("ab")); // true
    System.out.println(s.startsWith("b", 1));   // true


    System.out.println("aabbaa".indexOf('b'));  // 2
    System.out.println("aabbaa".indexOf('b', 1));   // 2
    System.out.println("aabbaa".indexOf('b', 4));   // -1
    System.out.println("aabbaa".indexOf("ba")); // 3

    System.out.println("abcde".lastIndexOf("cd", 3));   // 2

    System.out.println("abcde".substring(1, 2));    // b
    System.out.println("abcde".substring(1));   // bcde

    System.out.println("a".concat("bcd"));  // abcd

    System.out.println("aabbccaa".replace('a', 'x'));    // xxbbccxx

    System.out.println(Locale.getDefault());    // zh_CN
    System.out.println("一".toUpperCase());  // 一
    System.out.println("一".toLowerCase());  // 一
}

参考资料

posted @ 2021-01-14 17:28  流星<。)#)))≦  阅读(86)  评论(0编辑  收藏  举报