1 String概述:
String 是一个引用类型。在 java.lang 包中,无需手动导包。
字符串的内容在创建后存放在字符串常量池(StringTable)中,不会发生改变。直接拼接、更改字符串会产生新的字符串。
Java中所有字符串都是String类对象。
使用str.charAt()来获取单个字符。
使用str.toCharArray()来将字符串转变为字符数组
2 创建String对象:
共两种方法:
2.1 直接赋值:
String str = “abcd”;
2.2 new 构造:
不常用。
构造方法参数有:
- 空参构造
- 字符串
- char数组
- byte数组
3 字符串的比较:== 与 .equals()
- “==”比较的是在串池中的地址;
- strA.equals(string strB)比较的是两字符串的内容
- strA.equalsIgnoreCase()比较两对象的内容,但忽略大小写,常用于验证码
常用.equals()。
4 字符串的截取:subString()方法
Java中的substring
方法用于提取字符串的子字符串。这个方法有两个重载版本:
String substring(int beginIndex)
:返回从指定的beginIndex
开始到字符串结尾的子字符串。
String substring(int beginIndex, int endIndex)
:返回从指定的beginIndex
开始到endIndex
结束的子字符串。注意,返回的子字符串包含beginIndex
处的字符,但不包含endIndex
处的字符。
例:电话号码的截取
public static void main(String[] args) {
String phoneNumber="12312312345";
String begin=phoneNumber.substring(0,3);
String last=phoneNumber.substring(7);
String result=begin+"****"+last;
System.out.println(result);
}
5 字符串的替换:repalce()方法
Java中的replace方法用于替换字符串中的字符或子字符串。这个方法有两个常用的重载版本:
- String replace(char oldChar, char newChar):返回一个新字符串,在这个字符串中,所有出现的 oldChar 都被替换为 newChar。
- String replace(String oldstring,String newstring):返回一个新字符串,在这个字符串中,所有出现的 oldstring 都被替换为 newstring。
例:
public static void main(String[] args) {
String talk="你玩的真TMD好,以后不要再玩了!cnm";
talk=talk.replace("TMD","***").replace("cnm","***");
System.out.println(talk);
}
输出为:你玩的真***好,以后不要再玩了!***
6 字符串的分割 split:
在 Java 中,split
方法是 String
类的一个非常有用的方法,它用于根据指定的分隔符将字符串分割成子字符串,并返回一个字符串数组。这个方法可以接受一个正则表达式作为分隔符,使得字符串分割非常灵活。
使用 split
方法
基本用法
split
方法的基本语法如下:
public String[] split(String regex)
regex
:一个正则表达式,用于指定分隔符。
示例
假设我们有一个字符串,包含用逗号分隔的数字,我们想要将这些数字分割成单独的字符串:
javaString numbers = "1,2,3,4,5";
String[] numberArray = numbers.split(","); // 使用逗号作为分隔符
在这个例子中,split
方法将字符串 "1,2,3,4,5"
分割成五个子字符串:["1", "2", "3", "4", "5"]
。
使用正则表达式
split
方法也支持使用正则表达式作为分隔符,这使得分割更加灵活。例如,如果我们想要根据一个或多个空格来分割字符串:
javaString text = "Hello World! How are you?";
String[] words = text.split("\\s+"); // \s+ 表示一个或多个空白字符
在这个例子中,split
方法将字符串 "Hello World! How are you?"
分割成多个子字符串,每个单词都是一个元素:["Hello", "World!", "How", "are", "you?"]
。
7 字符串的拼接与StringBuild:
Java编译器对String
做了特殊处理,使得我们可以直接用 +
拼接字符串。
7.1 StringBuild概述:
由于字符串不可变,所以当拼接字符串的时候(尤其是使用+
号操作符)的时候,就需要考量性能的问题,你不能毫无顾虑地生产太多 String 对象,对珍贵的内存造成不必要的压力。
于是 Java 就设计了一个专门用来解决此问题的 StringBuild 类。
StringBuild类的对象可以简单视作一个容器,可以改变它的内容。
7.2 方法:
构造方法:
StringBuilder()
- 创建一个空的
StringBuilder
对象,初始容量为16个字符。
- 创建一个空的
StringBuilder(int capacity)
- 创建一个具有指定初始容量的
StringBuilder
对象。 - 参数:
capacity
:初始容量。
- 创建一个具有指定初始容量的
StringBuilder(String str)
- 创建一个包含指定字符串内容的
StringBuilder
对象。 - 参数:
str
:初始化内容的字符串。
- 创建一个包含指定字符串内容的
常用方法:
StringBuilder append(Object obj)
- 将指定对象的字符串表示形式追加到此序列。
- 参数:
obj
:要追加的对象。
- 返回值:
StringBuilder
对象本身。
StringBuilder insert(int offset, Object obj)
- 在指定位置插入对象的字符串表示形式。
- 参数:
offset
:插入位置的偏移量。obj
:要插入的对象。
- 返回值:
StringBuilder
对象本身。
StringBuilder delete(int start, int end)
- 删除从指定开始索引到结束索引(不包括)的子字符串。
- 参数:
start
:开始索引(包含)。end
:结束索引(不包含)。
- 返回值:
StringBuilder
对象本身。
int capacity()
- 返回当前
StringBuilder
对象的容量。 - 返回值:容量。
- 返回当前
String toString()
- 返回此序列的字符串表示形式。
- 返回值:字符串表示形式。
StringBuilder reverse()
- 将此字符序列用其反转形式取代。
- 返回值:
StringBuilder
对象本身。
其他如subString、replace与String类的一样。
注意:对于普通的字符串+
操作,并不需要我们将其改写为StringBuilder
,因为Java编译器在编译时就自动把多个连续的+
操作编码为StringConcatFactory
的操作。在运行期,StringConcatFactory
会自动把字符串连接操作优化为数组复制或者StringBuilder
操作。
StringBuffer
StringBuffer
,这是Java早期的一个StringBuilder
的线程安全版本,它通过同步来保证多个线程操作StringBuffer
也是安全的,但是同步会带来执行速度的下降。
StringBuilder
和StringBuffer
接口完全相同,
8 StringJoiner:
要高效拼接字符串,应该使用StringBuilder
。
StringJoiner
是Java 8引入的新类,用于生成由分隔符分隔的字符串序列。它简化了字符串连接的过程,尤其是在处理集合或数组时。StringJoiner
提供了可选的前缀和后缀,可以在生成的字符串之前和之后添加内容。
构造方法:
StringJoiner(CharSequence delimiter)
- 创建一个没有前缀和后缀的
StringJoiner
对象。 - 参数:
delimiter
:分隔符。
- 创建一个没有前缀和后缀的
StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
- 创建一个带有指定前缀和后缀的
StringJoiner
对象。 - 参数:
delimiter
:分隔符。prefix
:前缀。suffix
:后缀。
- 创建一个带有指定前缀和后缀的
常用方法:
常用方法
StringJoiner add(CharSequence newElement)
- 将指定的内容添加到
StringJoiner
中。 - 参数:
newElement
:要添加的内容。
- 返回值:此
StringJoiner
对象。
- 将指定的内容添加到
StringJoiner merge(StringJoiner other)
- 将另一个
StringJoiner
的内容合并到此StringJoiner
中。 - 参数:
other
:要合并的StringJoiner
对象。
- 返回值:此
StringJoiner
对象。
- 将另一个
例:
public static void main(String[] args) {
StringJoiner sj1 =new StringJoiner(", ","[","]");
sj1.add("aaa").add("bbb").add("ccc").add("ddd");
System.out.println(sj1);
StringJoiner sj2 =new StringJoiner(", ","[","]");
sj2.add("11").add("22").add("33").add("44");
System.out.println(sj2);
sj1.merge(sj2);
System.out.println(sj1);
}
9 其他案例:
9.1 金额数字转大写:
public class Stringdemo {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int cash=sc.nextInt();
toLargecash(cash);
}
public static void toLargecash(int cash){
char[] Large={'零','壹','贰','叁','肆','伍','陆','柒','扒','玖'};
int[] arr_cash={0,0,0,0,0,0,0};
for (int i = 0; i < 7; i++) {
int digit=cash%10;
cash/=10;
if (digit==0)
continue;
else {
arr_cash[i]=digit;
}
}
System.out.print(Large[arr_cash[6]]+"佰");
System.out.print(Large[arr_cash[5]]+"拾");
System.out.print(Large[arr_cash[4]]+"万");
System.out.print(Large[arr_cash[3]]+"仟");
System.out.print(Large[arr_cash[2]]+"佰");
System.out.print(Large[arr_cash[1]]+"拾");
System.out.println(Large[arr_cash[0]]+"元");
}
}