20210114 java.lang.String
java.lang.String
基本信息
public final class String implements java.io.Serializable, Comparable<String>, CharSequencert.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()); // 一
}
浙公网安备 33010602011771号