UM2L11——String
UM2L11——String
本章代码关键字
1 | string.equals() //对比字符串的值是否相同 |
String
Java中String
在使用上和C#类似,但是需要注意以下两点区别
- 直接赋值字符串,如果字符串相同,则指向同一引用,
new String
,即使字符串相同引用也不同 - Java中字符串比较使用
equals
,用==
号是比较的引用地址
字符串声明方法
-
直接赋值字符串,注意:如果字符串相同,那么他们指向同一实体,在公共内存区域
1
2
3
4
5
6
7String s1 = "唐老狮";
String s2 = "唐老狮";
if (s1 == s2) {
System.out.println("同一地址");
}
else
System.out.println("不同地址");输出:
1
同一地址
-
new String()
,注意:使用new
,即使字符串相同也是不同实体1
2
3
4
5
6
7String s3 = new String("唐老狮");
String s4 = new String("唐老狮");
if (s3 == s4) {
System.out.println("同一地址");
}
else
System.out.println("不同地址");输出:
1
不同地址
使用构造函数实例化字符串,还可以使用重载,例如将字符数组转为字符串
1
2
3char[] chars = { 'a', 'b', 'c' };
String s5 = new String(chars);
System.out.println(s5);输出:
1
abc
字符串拼接
Java中字符串拼接规则和C#中相同,通过+
即可拼接
拼接时并不是修改原String
,而会生成新的String
,和C#中规则相同
1 | String s1 = "唐老狮"; |
输出
1 | 唐老狮12311.2 |
String中常用方法
-
判断字符串是否相等
注意!因为Java中没有运算符重载,所以
==
在Java里是用来判断变量引用地址是否相同,也就是判断两个变量是否指向一个对象1
2
3
4
5
6
7
8
9
10
11
12
13
14String s1 = "唐老狮";
String s2 = "唐老狮";
if (s1 == s2) {
System.out.println("同一地址");
}
else
System.out.println("不同地址");
String s3 = new String("唐老狮");
String s4 = new String("唐老狮");
if (s3 == s4) {
System.out.println("同一地址");
}
else
System.out.println("不同地址");输出:
1
2同一地址
不同地址
String
之间进行判断字符串内容是否相等,需要使用equals
方法,还有一个不区分大小写的equalsIgnoreCase
方法1
2
3
4
5
6
7
8
9
10
11
12String s3 = new String("唐老狮");
String s4 = new String("唐老狮");
if (s3.equals(s4))
{
System.out.println("s3和s4的字符串相等");
}
String s6 = new String("ABC");
String s7 = new String("abc");
if (s6.equalsIgnoreCase(s7))
{
System.out.println("忽略大小写的判断字符串是否相等");
}输出:
1
2s3和s4的字符串相等
忽略大小写的判断字符串是否相等 -
长度
方法是
string.length()
,由于Java没有属性,因此需要加括号1
2String s1 = "唐老狮12311.2";
System.out.println(s1.length()); -
正向查找
从头查找字符串中包含传入内容的索引,若不存在返回
-1
1
2
3
4
5String s1 = "唐老狮12311.2";
System.out.println(s1.indexOf("唐"));
System.out.println(s1.indexOf("老"));
System.out.println(s1.indexOf("老狮"));
System.out.println(s1.indexOf("A"));输出:
1
2
3
40
1
1
-1 -
反向查找
从尾部查找字符串中包含传入内容的索引,若不存在返回
-1
1
2
3s1 = "A唐老狮A";
System.out.println(s1.indexOf("A"));
System.out.println(s1.lastIndexOf("A"));输出:
1
20
4 -
获取指定索引处字符
由于Java没有索引器,因此获取索引处的字符需要使用方法
charAt()
1
2s1 = "A唐老狮A";
System.out.println(s1.charAt(1));输出:
1
唐
-
获取子字符串
注意!截取是左包含右不包含的!
1
2
3s1 = "A唐老狮A";
System.out.println(s1.substring(2));
System.out.println(s1.substring(2, 4));输出:
1
2老狮A
老狮 -
去除首尾空格
不会去除中间字符串的空格
1
2
3String s8 = " 123 123 123 ";
System.out.println(s8);
System.out.println(s8.trim());输出:
1
2123 123 123
123 123 123 -
字符串替换
注意,该方法会生成一个新的字符串对象,而不是在原有的对象上修改
1
2String s8 = " 123 123 123 ";
System.out.println(s8.replace('1', 'A'));输出:
1
A23 A23 A23
-
判断字符串开始和结尾
判断一个字符串的开始或者结尾是否为传入的字符串,一般用来确认一个字符串的前缀或者后缀
1
2
3
4
5String s9 = "222333.txt";
System.out.println(s9.startsWith("222"));
System.out.println(s9.startsWith("333"));
System.out.println(s9.endsWith(".txt"));
System.out.println(s9.endsWith(".png"));输出:
1
2
3
4true
false
true
false -
大小写转换
1
2
3
4String s10 = "AAAABBB";
System.out.println(s10.toLowerCase());
String s11 = "ccccddd";
System.out.println(s11.toUpperCase());输出:
1
2aaaabbb
CCCCDDD -
字符串分割
1
2
3
4
5String s12 = "123,345,678,123";
String[] strs = s12.split(",");
for (String s : strs) {
System.out.println(s);
}输出:
1
2
3
4123
345
678
123 -
字符串格式化
Java的字符串格式化和C#不同,它是通过使用类似于C的占位符来实现格式化
1
2
3
4boolean b = true;
Date date = new Date();
String string = String.format("%b, %tF", b, date);
System.out.println(string);输出:
1
true, 2024-04-01
不同占位符对应的格式化内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13%b、%B: boolean类型格式化符号
%s、%S: String类型格式化符号
%c、%C: char类型格式化符号
%d: 十进制数格式化符号
%o: 八进制数格式化符号
%x、%X: 十六进制数格式化符号
%e: 十进制数的科学计数法格式化符号
%tF: 年-月-日 时间格式
%tD: 月/日/年 时间格式
%tc: 全部日期和时间信息
%tr: 时:分:秒 PM(AM) 时间格式
%tT: 时:分:秒 24小时制 时间格式
%tR: 时:分 24小时制 时间格式
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!