Java的String类是不可变的,意味着一旦创建,其值就不能被改变。String类提供了丰富的API来操作字符串。
以下是一些常用的方法:
构造方法:
有以下几种常见的:
public class stringlearn {public static void main(String[] args) {String str1 = "Hello World";String str2 = new String(str1);String str3 = new String();char[] chararray = {'a', 'b', 'c', 'd', 'e'};String str4 = new String(chararray);String str5 = new String(chararray,0,2);byte[] bytearray = new byte[] {97,98,99,100,101,102,103};String str6 = new String(bytearray);System.out.println(str1);//Hello WorldSystem.out.println(str2);//Hello WorldSystem.out.println(str3);//System.out.println(str4);//abcdeSystem.out.println(str5);//abSystem.out.println(str6);//abcdefg}
}
Java13引入了引入的文本块的语法。
在文本块中,您可以跨多行定义字符串,而不需要使用\n
或+
来拼接字符串。这样可以提高代码的可读性。
String str = """sfsdfsfdsddsfdsf""";
System.out.println(str)//输出的结果是
sfsdf
sfdsd
dsf
dsf//
获取字符串长度:
此处str为String的变量名
int length = str.length();
字符访问
char firstchar = str.charAt(0);
// 获取指定位置的字符
子字符串
String Str = str.substring(startIndex);
从startIndex开始截取到字符串末尾
String Str = str.substring(startIndex, endIndex);
截取从startIndex到endIndex(不包括endIndex)的子串
startIndex和endIndex是要截取的位置(下标)
比较字符串
一、比较内容是否相等
boolean isEqual = str.equals(anotherStr);
二、忽略大小写比较
if(str1.equals("Hello World")){System.out.println("相等");}else {System.out.println("不相等");}
boolean isEqualIgnoreCase = str.equalsIgnoreCase(anotherStr);
三、比较返回一个数
int compareResult = str.compareTo(anotherStr);
如果两个字符串相等,则返回值为0。
如果调用compareTo()方法的字符串比传入的字符串小,则返回一个负整数。
如果调用compareTo()方法的字符串比传入的字符串大,则返回一个正整数。
具体返回值的计算规则如下:
-
如果两个字符串相等,则返回值为0。
-
如果调用compareTo()方法的字符串在按字典顺序排列时排在被比较的字符串之前,则返回一个负整数。这个负整数实际上是两个字符串在第一个不同字符上的 Unicode 编码点的差值。
-
如果调用compareTo()方法的字符串在按字典顺序排列时排在被比较的字符串之后,则返回一个正整数。这个正整数实际上也是两个字符串在第一个不同字符上的 Unicode 编码点的差值。
以下是ASCII与Unicode的介绍博客
Unicode与ASCII-CSDN博客
在Java中,字符串是以Unicode编码的方式存储的。因此,比较字符串时通常会涉及到比较其中包含的字符的Unicode编码点。
compareTo()方法在比较字符串时也是根据两个字符串中的对应字符的Unicode编码点来确定字符串的大小关系的。
了解Unicode编码点的概念对理解字符串比较以及其他涉及Unicode字符集的操作非常重要。Unicode编码点的唯一性可以帮助确保不同的字符在计算机中得到正确的表示和处理。
查找字符或子串
使用indexOf与lastIndexOf
indexOf
如果找到相关的字符就返回该字符第一次出现的位置(从0开始数)
lastIndexOf
如果找到相关的字符就返回该字符最后一次出现的位置(从0开始数)
替换字符串
有以下四种替换字符串的方法
前三种的替换都是全局调用
replaceAll的使用需要用正则表达式
replaceFirst则就是只替换第一次遇到的
replace与replaceAll的区别:
由于replaceAll使用正则表达式解析,处理速度通常比直接的replace慢,尤其是在处理大量数据时。因此,在不需要正则表达式功能时,优先考虑使用replace。
去除空白
一、trim()
去除字符串首尾的空格
String str13 = " Hello World ";
String str14 = str13.trim();
System.out.println(str14);//Hello World
使用这个方法会返回一个新的字符串
二、strip()
Java 11起,功能与trim相同,但更高效
strip() 删去头尾的空格
stripLeading() 删去头部的空格
stripTrailing() 删去尾部的空格
转换大小写
toUpperCase(); 转化为大写
toLowerCase(); 转化为小写
String str1 = "Hello World";
String str19 = str1.toLowerCase();
System.out.println(str19); //hello world
String str20 = str1.toUpperCase();
System.out.println(str20); //HELLO WORLD
分割字符串
String[] parts = str.split(","); // 根据指定分隔符拆分字符串为数组
String sentence = "Hello World this is Java";
String[] words = sentence.split(" ");
// words 现在是 ["Hello", "World", "this", "is", "Java"]
判断字符串特性
boolean str2 = str.isEmpty();
判断字符串是否为空
boolean str2 = str.isBlank();
Java 11起,判断字符串是否为空白(空格、制表符、换行符或空字符串)
连接字符串
一、concat()
String str1 = "Hello World";
String str2 = new String(str1);
String str21 =str1.concat(str2);
System.out.println(str21);//Hello WorldHello World
二、join()
使用分隔符连接字符串数组
String str =String.join("_","str1","str2");
System.out.println(str);//str1_str2
其他操作
转换为字节数组
byte[] bytes = str.getBytes();
格式化字符串
String str23 = String.format("hello|%20s|",str1);
System.out.println(str23);//输出的结果是:hello| Hello World|
反转字符串(非String类直接方法,但常用)
String reversed = new StringBuilder(str).reverse().toString();