常见方法
1.构造方法
在声明字符串时,使用字符串对象的方式来声明时使用的方法。
方法名 | 描述 |
---|---|
String( ) | 初始化新创建的 String 对象,使其表示空字符序列 |
String(byte[] bytes) | 通过使用平台的默认字符集解码指定的字节数组来构造新的 String |
*String(byte[] bytes, Charset charset)* | 构造一个新的 String 用指定的字节的数组解码 ``charset |
*String(byte[] bytes, String charsetName)* | 构造一个新的 String 用指定的字节的数组解码 charsetName |
String(char[] value) | 构造一个新的 String 由指定的字符的数组构成 |
String(String original) | 初始化新创建的 String 对象,使其表示与参数相同的字符序列;换句话说,新创建的字符串是参数字符串的副本 |
String(StringBuffer buffer) | 分配一个新的字符串,其中包含当前包含在字符串缓冲区参数中的字符序列 |
String(StringBuilder builder) | 分配一个新的字符串,其中包含当前包含在字符串构建器参数中的字符序列 |
2.实例方法
方法名 | 返回值类型 | 描述 |
---|---|---|
charAt(int index) | char | 返回指定索引处的字符 |
subSequence(int beginIndex, int endIndex) | String | 返回作为该序列的子序列的字符序列。(从某一位置到某一位置,[ )包含左,不包含右。) |
subSequence(int beginIndex) | String | 返回一个字符串,该字符串是该字符串的子字符串。(从某一位置开始, [ ) ) |
equals(Object obj) | 将此字符串与指定对象进行比较。 | |
equalsIgnoreCase(String anotherString) | String | 将此字符串与另一个字符串进行比较,忽略大小写。 |
compareT0(String anotherString) | int | 按字典顺序比较两个字符串。( > string 大 , < 0 anotherString 大 , = 0 一样大) |
compareToIgnoreCase(String str) | int | 按字典顺序比较两个字符串,忽略大小写差异。 |
length() | int | 返回当前字符串的长度 |
isBlank() | boolean | 如果字符串为空或仅包含空格代码点,则返回 true,否则返回 false。 |
isEmpty() | boolean | 当且仅当 length() 为 0 时返回 true。 |
toString() | String | 这个对象(已经是一个字符串了!) |
toCharArray() | char[] | 将此字符串转换为新的字符数组。 |
trim() | String | 返回一个新字符串,去除当前字符串的前导和尾部空格 |
strip() | String | 返回一个字符串,其值为该字符串,并删除所有前导和尾随空格。 |
stripIndent() | String | 返回一个字符串,其值为该字符串,并从每行的开头和结尾删除了附带的空格。(去除缩进) |
stripLeading() | String | 返回一个字符串,其值为该字符串,并删除所有前导空格 |
stripTrailing() | String | 返回一个字符串,其值为该字符串,并删除所有结尾空格。 |
concat(String str) | String | 将指定字符串连接到该字符串的末尾 |
contains(CharSequence s) | Boolean | 当且仅当此字符串包含指定的 char 值序列时返回 true。 |
startsWith(String prefix) | boolean | 判断当前字符串是否以指定的前缀开头 |
startsWith(String prefix,int toffs) | boolean | 测试此字符串中从指定索引开始的子字符串是否以指定前缀开头。 |
endsWith(String suffix) | boolean | 判断当前字符串是否以指定的后缀结尾 |
indexOf(String str) | int | 返回第一次出现指定字符串的索引位置,从头开始搜索 |
indexOf(String str,int fromIndex) | int | 返回此字符串中指定子字符串第一次出现的索引,从指定索引开始。 |
lastIndexOf(String str) | int | 返回最后一次出现指定字符串的索引位置,从末尾开始搜索 |
indent(int n) | int | 根据n的值调整该字符串每行的缩进,并标准化行终止符。 |
split(String regex) | String[] | 根据指定的正则表达式将当前字符串拆分为子字符串数组 |
split(String regex,int limit) | String[] | 围绕给定正则表达式的匹配项拆分此字符串。(limit 最多分割几个) |
join(CharSequence delimiter, CharSequence... elements) | String | (static)使用指定的分隔符将多个元素连接为一个字符串 |
repeat(int count) | String | 返回一个字符串,其值是该字符串重复 count 次的串联。 |
replace(char oldChar, char newChar) | String | 返回用 newChar 替换该字符串中所有出现的 oldChar 所得到的字符串。 |
replace(CharSequence target,CharSequence relacement) | String | 将此字符串中与文字目标序列匹配的每个子字符串替换为指定的文字替换序列。 |
replaceAll(String regex,String relacement) | String | 将此字符串中与给定正则表达式匹配的每个子字符串替换为给定替换。 |
replaceFirst(String regex,String relacement) | String | 将此字符串中与给定正则表达式匹配的每个子字符串替换为给定替换。 |
format(String format,Object ....args) | static String | (static)使用指定的格式字符串和参数返回格式化字符串。 |
format(Local l,String format,Object ....args) | static String | 使用指定的区域设置、格式字符串和参数返回格式化字符串 |
formatted(String format) | String | 使用此字符串作为格式字符串和提供的参数进行格式化 |
intern() | String | 如果字符串在常量池中有就返回常量池的对象,如果没有就将对象放回常量池中。 |
codePointAt(int index) | int | 返回指定索引处的Unicode代码点 |
codePointCount(int beginIndex, int endIndex) | int | 返回指定范围内的Unicode代码点数量 |
toLowerCase() | String | 返回一个新字符串,将所有字符转换为小写字母 |
toUpperCase() | String | 返回一个新字符串,将所有字符转换为大写字母 |
matches(String regex) | boolean | 判断当前字符串是否与指定的正则表达式匹配 |
判断字符出啊是否为空
isEmpty
当且仅当字符串长度为0时,返回true
isBlank
当字符串长度为0、空、空格时也返回true
例:
String str = ""; // 空串
System.out.println(str.length());//0
System.out.println(str.isEmpty());//true;
System.out.println(str.isBlank()); // true
str = "\t";
System.out.println(str.length()); // 1
System.out.println(str.isEmpty());// false
System.out.println(str.isBlank());// true
String s = null;
System.out.println(str.length()); // 1
System.out.println(str.isEmpty());// false
System.out.println(str.isBlank());// true
去除空格
// 去除两端空格返回新的字符串
// str = str.trim();//旧方法
str = str.strip();
// 去除前边的空白
str = str.stripLeading();
//去除后边的空白
str = str.stripTrailing();
// 去除缩进
str = str.stripIndent();
System.out.println(str.length());// 11
System.out.println(str);//hello word
子串
String str = "hello world";
// 子串
// [beginIndex ~)
String sub = str.substring(5);// word有空格
// [beginIndex, endIndex)
sub = str.substring(3, 10);
System.out.println(sub); // lo worl
比较字符串大小
比较规则是基于字符串的 Unicode 值。当进行比较时,
compareTo
方法会逐个比较字符串中相应位置的字符的 Unicode 值。首先比较第一个字符,如果它们不相等,则返回它们的差值(第一个字符的 Unicode 值减去第二个字符的 Unicode 值)。如果第一个字符相等,则继续比较下一个字符,直到找到不相等的字符或一个字符串已经遍历完。
// 比较字符串 0 小于0 大于0
String a = "Abc";
String b = "abc";
System.out.println(a.compareTo(b)); // -32
// 忽略大小写
System.out.println(a.compareToIgnoreCase(b)); // 0
字符串拼接
字符串只能做 + 操作,表示拼接。任何类型的元素和字符串做 + 操作都字符串的拼接
// 字符串拼接
// str = str.concat(" world");
str = str + " world";
System.out.println(str);
String s = 1 + 1 + "1" + 1 + 1;
//String s = new Person("张三", '男', 20, false) + str;
System.out.println(s);// 2111 212
格式化
String str = "";
// 格式化
str = "我是%s".formatted("甜甜");
System.out.println(str);//我是甜甜
// 占位符 %s 字符串 %b boolean %c char %d integer %f 浮点数
str = """
我是%s
我说%s
""".formatted("甜甜", "爱你");
System.out.println(str);
//我是甜甜
//我说爱你
str = String.format("我今年%d岁", 23);
System.out.println(str);//我今年23岁
字符串格式符
格式符 | 说明 | 示例 |
---|---|---|
%s | 字符串类型 | “开发喵” |
%c | 字符类型 | ‘m’ |
%b | boolean | true |
%d | 整数类型(10进制) | 100 |
%x | 整数类型(16进制) | FF |
%o | 整数类型(8进制) | 77 |
%f | 浮点类型 | 99.99 |
intern
如果字符串在常量池中有就返回常量池中的对象,
如果没有就将对象放入常量池中,并将这个对象返回
String str = "abc";
String s = new String("abc");
String s1 = s.intern();
System.out.println(str == s); // false
System.out.println(str == s1); // true
System.out.println(s == s1); // false
// 2.
String s = new String("abc");
String s1 = s.intern();
String str = "abc";
System.out.println(str == s); // false
System.out.println(str == s1); // true
System.out.println(s == s1); // false
// 3.
String a = "a";
String s = new String(a + "bc");
String s1 = s.intern();
String str = "abc";
System.out.println(str == s); // true
System.out.println(str == s1); // true
System.out.println(s == s1); // true
// 4.
String a = "a";
String s = new String(a + "bc");
String str = "abc";
String s1 = s.intern();
System.out.println(str == s); // false
System.out.println(str == s1); // true
System.out.println(s == s1); // false
其他
public static void main(String[] args) {
String str = "hello world";
// 判断是否包含
boolean contains = str.contains("hello world");
System.out.println(contains);//true
// 是否以某个字符串结尾
String email = "xxxx@qq.com";
boolean end = email.endsWith(".com");
System.out.println(end);//true
// 是否以某个字符串开头
boolean start = email.startsWith("xxx");
System.out.println(start);//true
// 子串在字符串中第一次出现的位置(下标), -1 表示没出现
int index = str.indexOf("e");
System.out.println(index);//1
int hello = str.indexOf("le");
System.out.println(hello); // -1
// 从 fromIndex开始第一次出现的下标
index = str.indexOf("l", 3);
System.out.println(index);//3
// 最后一次出现的位置
index = str.lastIndexOf("l");
System.out.println(index); // 9
String s = "";
str = """
先天下之忧而忧,
后天下之乐而乐。
""";
System.out.println(str);
s = str.indent(2);
System.out.println(s);
//先天下之忧而忧,
//后天下之乐而乐。
// 先天下之忧而忧,
// 后天下之乐而乐。
// 合并 static方法
str = String.join(".", "a", "b", "c", "d");
System.out.println(str);//a.b.c.d
// 重复
str = "666";
str = str.repeat(3);
System.out.println(str);//666666666
// 替换
str = "abcdabcd";
// str = str.replace("a","A");
str = str.replaceFirst("a", "A");
System.out.println(str);//Abcdabcd
}
}
3.比较
-
==
- 比较基本数据类型,比较的是数据值
- 比较引用数据类型,比较的是地址值
String s1 = "abc"; String s2 = "abc"; System.out.println(s1==s2);//true String s1 = new String("abc");//堆里面的地址 String s2 = "abc";//串池地址值 System.out.println(s1==s2);//false
-
equals/
equalsIgnoreCase
String s1 = new String("abc"); String s2 = "abc"; System.out.println(s1==s2);//false //比较字符串内容 boolean result = s1.equals(s2); System.out.println(result);//true String s3 = "Abc"; boolean result1 = s1.equals(s3); System.out.println(result1);//false //忽略大小写 boolean result2 = s2.equalsIgnoreCase(s3); System.out.println(result1);//true Scanner sc =new Scanner(System.in); System.out.println("请输入一个字符串abc"); String str = sc.next(); System.out.println(str == s2);//false
equals()和 ==的区别:
- ==操作符对于基本数据类型,比较的是它们的值。引用数据类型比较的是两个对象的引用,即两个对象引用是否指向同一地址。
- equals()用于比较两个对象的值是否相等,可以重写方法。