内容纲要

字符串

java中字符串值(相当于char[]字符数组,底层原理是byte[]数组)都属于java.lang.String,字符串的内容永不可变。

定义

  1. 直接通过""创建String对象,存在于字符串常量池。(new 出的对象不在常量池中)
String name = "xyz";
  1. 使用构造方法String ()
String name = new String();
  1. 使用构造方法String(byte[] bytes)
byte[] bytes = {65,66,67};
String name = new String(bytes);
  1. 使用构造方法String(char[] value)
char[] value = {'A','B','C'};
String name = new String(value);

字符串常量池

比较

其中用==在基本类型中是数值比较,在引用类型中为地址值比较。

  1. equals()比较两个字符串内容是否相等,若有字符串常量,建议用字符串常量调用"".equals()避免空指针。
String str1 = "ab";
String str2 = "cd";
boolean isEqual = str1.equals(str2);
  1. 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();

StringBuilderStringBuffer

其中StringBuilderStringBuffer是可变的,可以预分配缓冲区,添加字符串不会创建新的对象。

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的线程安全版本
  • StringBuilderStringBuffer执行速度快

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
最后修改日期:2020年8月18日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。