20210114 java.lang.String
java.lang.String
基本信息
public final class String implements java.io.Serializable, Comparable<String>, CharSequence
rt.jar
- 引入版本:
1.0
继承关系
静态常量
静态常量 |
---|
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()); // 一
}