字符串
在
java
中字符串值(相当于char[]
字符数组,底层原理是byte[]
数组)都属于java.lang.String
类,字符串的内容永不可变。
定义
- 直接通过
""
创建String对象,存在于字符串常量池。(new 出的对象不在常量池中)
String name = "xyz";
- 使用构造方法
String ()
String name = new String();
- 使用构造方法
String(byte[] bytes)
byte[] bytes = {65,66,67};
String name = new String(bytes);
- 使用构造方法
String(char[] value)
char[] value = {'A','B','C'};
String name = new String(value);
比较
其中用
==
在基本类型中是数值比较,在引用类型中为地址值比较。
equals()
比较两个字符串内容是否相等,若有字符串常量,建议用字符串常量调用"".equals()
避免空指针。
String str1 = "ab";
String str2 = "cd";
boolean isEqual = str1.equals(str2);
equalsIgnoreCase()
,忽略大小写比较字符串内容是否相等
String str1 = "ab";
String str2 = "Ab";
boolean isEqual = str1.equalsIgnoreCase(str2);
获取字符串的长度
String str = "abcde";
int length = str.length();
字符串拼接
字符串拼接,拼接后的字符串是新的字符串
String str1 = "Hello";
String str2 = "World";
String str3 = str1.concat(str2);
按照指定格式的参数字符串对字符串数组进行拼接
String[] strs = {"Hello", "World"};
String str = String.join("-", strs);
查找字符串
索引位置从0开始
获取索引位置的单个字符
String str = "abcde";
char a = str.charAt(4);
参数字符串在本字符串首次出现的索引位置,如果没有返回-1。
String str = "abcde";
int index = str.indexOf("cd");
参数字符串在本字符串最后出现的索引位置,如果没有返回-1。
String str = "abcdecd";
int index = str.lastIndexOf("cd");
参数字符串是否为本字符串的子串
String str = "abcde";
boolean is = str.contains("cd");
参数字符串是否为本字符串的开始子串
String str = "abcde";
boolean is = str.startsWith("ab");
参数字符串是否为本字符串的结束子串
String str = "abcde";
boolean is = str.endsWith("de");
提取子串
从指定索引处开始截取到字符串末尾
String str = "abcde";
String str1 = str.substring(2);
从指定索引处开始到指定索引处(不包括)结束截取字符串
String str = "abcde";
String str1 = str.substring(2,4);
字符串转换
将字符串转换成char[]
数组
String str = "abcde";
char[] ch = str.toCharArray();
将字符串转换成底层的byte[]
数组(方法没有指定编码,会使用平台默认的编码进行转换)
String str = "abcde";
byte[] bytes = str.getBytes();
将出现的老字符串替换为新字符串,返回替换后的结果(使用正则表达式)
String str = "hello world";
String str1 = str.replace("world","baby");
字符串分割
按照参数字符串将字符串分成若干部分 (使用正则表达式)
String str = "hello,world,baby";
String[] str1 = str.split(",");
格式化字符串
使用和C语言一样的占位符来格式化字符串,在字符串中加入占位符后续通过参数传入形成新串。
String str = "hello %s";
String str1 = String.format(str, "world");
//或者jdk13之后的
// String str1 = str.formatted("world");
去除空白字符
移除字符串首尾空白字符。空白字符包括空格,\t
,\r
,\n
,\b
等。
String str = "\t \nhello \b";
String str1 = str.trim();
可以移除中文的空白字符
String str = "\t \n \u3000hello \b";
String str1 = str.strip();
移除前面的空白字符
String str = "\t \n \u3000hello \b";
String str1 = str.stripLeading();
移除后面的空白字符
String str = "\t \n \u3000hello \b";
String str1 = str.stripTrailing();
判断是否为空串,空串""
的长度为0
String str = "";
boolean is = str.isEmpty();
判断是否为空白串(包括\n
、\t
、\b
等),即串的长度不为0,无内容。
String str = " \n";
boolean is = str.isBlank();
StringBuilder
与StringBuffer
其中
StringBuilder
与StringBuffer
是可变的,可以预分配缓冲区,添加字符串不会创建新的对象。
StringBuilder
字符串末尾追加字符
StringBuilder sb = new StringBuilder("Hello");
sb.append("World");
字符串中插入字符串insert(索引值(0),字符串参数);
StringBuilder sb = new StringBuilder("World");
sb.insert(0,"Hello");
字符串的"+
"拼接默认被转换成了StringBuilder
如:
String str = "Hello" + "World" + ".";
转换成:
StringBuilder sb = new StringBuilder("Hello").append("World").append(".");
字符串删除:delete(开始位置,结束位置(不包括))
sb.delete(sb.length() - 1,sb.length());
将字符串反转:
StringBuilder sb = new StringBuilder("Hello");
sb.reverse();
将StringBuilder
转换成String
StringBuilder sb = new StringBuilder("Hello");
String str = sb.toString();
StringBuffer
- 与
StringBuilder
实现一样,是StringBuilder
的线程安全版本 StringBuilder
比StringBuffer
执行速度快
StringJoiner
可以使用特点格式拼接字符串
StringJoiner s = new StringJoiner(", ");
s.add("1");
s.add("2"); //1,2
添加开头结尾
StringJoiner sj = new StringJoiner(", ", "0", "3");
sj.add("1");
sj.add("2");//01, 23
留言