✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨
🎈🎈作者主页: 🎈丠丠64-CSDN博客🎈
✨✨ 帅哥美女们,我们共同加油!一起进步!✨✨
目录
2.boolean equals(Object anObject) 方法:按照字典序比较
3.int compareTo(String s) 方法: 按照字典序进行比较
4.int compareToIgnoreCase(String str) 方法:忽略大小写
一、前言
在JAVA中的字符串存储是可以直接使用String这个引用数据类型,不像C语言表示字符串只能使用字符数组或者字符指针,使我们操作起来更方便,更符合不符合面相对象的思想。
二、字符串常量
String类对象的直接赋值: 将一个匿名对象设置一个具体的引用,相当于开辟一个栈内存,指向这个匿名对象,这个匿名对象是存在堆内存的。
String arr1 = "abcd";
String arr2 = "abcd";
所以相同的字符串常量可以有多个对象指向
三、String类型
String是引用类型,内部并不存储字符串本身,我们来看一下String类的实现源码,字符串实际保存在char类型的数组中,并且final修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内容是可以修改的。
String arr1 = new String("abcd");
arr1 += "ooooo";
System.out.println(arr1);
![](https://img-blog.csdnimg.cn/direct/de216e80e13440d5a0842101fc9a8c6d.png)
![](https://img-blog.csdnimg.cn/direct/feb4e440103c4c48ac8ce71095546a8b.png)
四、字符串构造
常用的构造方法下面三种构造方法
1.使用常量串进行构造
String arr1 = "abcdefg";
System.out.println("arr1 =" + arr1);
2.使用new String对象
String arr2 = new String("abcdefg");
System.out.println("arr2 =" + arr2);
3.使用字符数组进行构造
char[] ch = {'a','b','c','d','e','f','g'};
String arr3 = new String(ch);
System.out.println("arr3 =" + arr3);
四、String对象的比较
字符串的比较JAVA中提供了四种常见的方法
1.==比较是否引用同一对象
对于内置类型,==比较的是两个对象的值;但对引用类型,==对比的是两个对象的地址
String arr1 = new String("abcd");
String arr2 = new String("abcd");
String arr3 = "abcd";
String arr4 = "abcd";
System.out.println(arr1 == arr2);
System.out.println(arr3 == arr4);
理论上来说这四个字符串相等,应该都输出true
但是arr1跟arr2 为两个对象所以地址不同,而arr3和arr4指向同一字符串常量地址相同
2.boolean equals(Object anObject) 方法:按照字典序比较
String arr1 = new String("abcd");
String arr2 = new String("abcd");
String arr3 = new String("oooo");
System.out.println(arr1.equals(arr2));
System.out.println(arr1.equals(arr3));
3.int compareTo(String s) 方法: 按照字典序进行比较
String arr1 = new String("abcd");
String arr2 = new String("abcd");
String arr3 = new String("oooo");
System.out.println(arr1.compareTo(arr2));
System.out.println(arr1.compareTo(arr3));
System.out.println(arr1.compareTo(arr3));
4.int compareToIgnoreCase(String str) 方法:忽略大小写
忽略大小写的比较,大于返回一个大于0的数字,小于返回小于0的数字。相等返回0.
String arr1 = new String("abcd");
String arr2 = new String("ABcd");
String arr3 = new String("oood");
System.out.println(arr1.compareToIgnoreCase(arr2));
System.out.println(arr1.compareToIgnoreCase(arr3));
System.out.println(arr1.compareToIgnoreCase(arr3));
五、字符串查找
常见的String类提供的常用查找的方法有下面这些
方法 | 功能 |
---|---|
char charAt(int index)
|
返回
index
位置上字符,index为负数或越界,抛IndexOutOfBoundsException异常
|
int indexOf(int ch)
|
返回
ch
第一次出现的位置,没有返回
-1
|
int indexOf(int ch, int
fromIndex)
|
从
fromIndex
位置开始找
ch
第一次出现的位置,没有返回
-1
|
int indexOf(String str)
|
返回
str
第一次出现的位置,没有返回
-1
|
int indexOf(String str, int
fromIndex)
|
从
fromIndex
位置开始找
str
第一次出现的位置,没有返回
-1
|
int lastIndexOf(int ch, int fromIndex)
|
从
fromIndex
位置开始找,从后往前找
ch
第一次出现的位置,没有返回-1
|
int lastIndexOf(int ch)
|
从后往前找,返回
ch
第一次出现的位置,没有返回
-1
|
int lastIndexOf(String str)
|
从后往前找,返回
str
第一次出现的位置,没有返回
-1
|
int lastIndexOf(String str, int fromIndex)
|
从
fromIndex
位置开始找,从后往前找
str
第一次出现的位置,没有返
回
-1
|
String arr1 = "abcda2bc1do1ab2oocdzbc2d";
System.out.println(arr1.charAt(3)); //下标为3的元素 -》d
System.out.println(arr1.indexOf('c')); //字符c,字符串中第一次出现的下标 -》2
System.out.println(arr1.indexOf('c',8)); //字符c,字符串中从下标八开始第一次出现的下标 -》17
System.out.println(arr1.indexOf("ab")); //字符串ab,字符串中第一次出现的下标 -》0
System.out.println(arr1.indexOf("ab",3)); //字符ab,字符串中从下标三开始第一次出现的下标 -》12
System.out.println(arr1.lastIndexOf('d')); //字符d,字符串中从最后开始倒着找第一次出现的下标 -》23
System.out.println(arr1.lastIndexOf('d',6)); //字符d,字符串中从下标6开始倒着找第一次出现的下标 -》3
System.out.println(arr1.lastIndexOf("cd")); //字符串cd,字符串中从最后开始倒着找第一次出现的下标 -》17
System.out.println(arr1.lastIndexOf("cd",6)); //字符串cd,字符串中从下标6开始倒着找第一次出现的下标 -》2
六、转换
1.数值和字符串转化
不光是整形,浮点跟布尔类型都可以转换为字符串
String arr1 = String.valueOf(123);
String arr2 = String.valueOf(12.3);
String arr3 = String.valueOf(true);
System.out.println(arr1);
System.out.println(arr2);
System.out.println(arr3);
字符串转其他类型需要用到包装类型
int num1 = Integer.parseInt("123");
double num2 = Double.parseDouble("123");
System.out.println(num1);
System.out.println(num2);
2.大小写转换
String arr1 = "aaa";
String arr2 = "BBB";
System.out.println(arr1.toUpperCase());//转大写
System.out.println(arr2.toLowerCase());//转小写
3.字符串转数组
字符串转数组
String arr1 = "abcd";
char[] ch = arr1.toCharArray();
for (int i = 0; i <ch.length ; i++) {
System.out.println(ch[i]);
}
数组转字符串
char[] ch = {'a','b','c','d'};
String arr2 = new String(ch);
System.out.println(ch);
4.去字符串中的左右空格
去掉字符串中的左右空格,保留中间空格
String arr1 = " abc def ";
System.out.println("[" + arr1 + "]");
System.out.println("[" + arr1.trim() + "]");
七、字符串替换
System.out.println(arr1.replace('a','o')); //将所有的字符a替换为o
System.out.println(arr1.replaceAll("aa","oo"));//将所有的字符串aa替换为oo
System.out.println(arr1.replaceFirst("aa","oo"));//将第一个字符串aa替换为oo
![](https://img-blog.csdnimg.cn/direct/336973087b8f44e6b82c23a239fb1d5d.png)
八、字符串拆分
String arr1 = "aaaa bbbb cccc";
String[] arrrs1 = arr1.split(" "); //将字符串用空格分割
for (int i = 0; i < arrrs1.length; i++) {
System.out.println(arrrs1[i]);
}
String[] arrrs2 = arr1.split(" ",2); //将字符串用空格分割为2组
for (int i = 0; i < arrrs2.length; i++) {
System.out.println(arrrs2[i]);
}
值得注意的是
- 字符"|","*","+"都得加上转义字符,前面加上 "\\"
- 而如果是 "\" ,那么就得写成 "\\\\"
- 如果一个字符串中有多个分隔符,可以用"|"作为连字符
String str = "name=zhangsan&age=18" ;
String[] result = str.split("&") ; //第一次拿&分割
for (int i = 0; i < result.length; i++) {
String[] temp = result[i].split("=") ; //第一次拿=分割
System.out.println(temp[0]+" = "+temp[1]);
}
九、字符串截取
System.out.println(arr1.substring(2)); //截取下标2到结尾范围的字符串
System.out.println(arr1.substring(0,4)); //截取下标[0,4)范围的字符串
十、StringBuilder和StringBuffer
方法 | 说明 |
---|---|
StringBuff append(String str)
|
在尾部追加,相当于
String
的
+=
,可以追加:
boolean
、
char
、
char[]
、
double
、
float
、
int
、
long
、
Object
、
String
、
StringBuff
的变量
|
char charAt(int index)
|
获取
index
位置的字符
|
int length()
|
获取字符串的长度
|
int capacity()
|
获取底层保存字符串空间总的大小
|
void ensureCapacity(int mininmumCapacity)
| 扩容 |
void setCharAt(int index, char ch)
|
将
index
位置的字符设置为
ch
|
int indexOf(String str)
|
返回
str
第一次出现的位置
|
int indexOf(String str, int fromIndex)
|
从
fromIndex
位置开始查找
str
第一次出现的位置
|
int lastIndexOf(String str)
|
返回最后一次出现
str
的位置
|
int lastIndexOf(String str, int fromIndex)
|
从
fromIndex
位置开始找
str
最后一次出现的位置
|
StringBuff insert(int offset, String str)
|
在
offset
位置插入:八种基类类型
& String
类型
& Object类型数据
|
StringBuffer deleteCharAt(int index)
|
删除
index
位置字符
|
StringBuffer delete(int start, int end)
|
删除
[start, end)
区间内的字符
|
StringBuffer replace(int start, int end, String str)
|
将
[start, end)
位置的字符替换为
str
|
String substring(int start)
|
从
start
开始一直到末尾的字符以
String
的方式返回
|
String substring(int
start
,
int end)
|
将
[start, end)
范围内的字符以
String
的方式返回
|
StringBuffer reverse()
|
反转字符串
|
String toString()
|
将所有字符按照
String
的方式返回
|
public static void main(String[] args) {
StringBuilder sb1 = new StringBuilder("hello");
StringBuilder sb2 = sb1;// 追加:即尾插-->字符、字符串、整形数字
sb1.append(' '); // hello
sb1.append("world"); // hello world
sb1.append(123); // hello world123
System.out.println(sb1); // hello world123
System.out.println(sb1 == sb2); // true
System.out.println(sb1.charAt(0)); // 获取0号位上的字符 h
System.out.println(sb1.length()); // 获取字符串的有效长度14
System.out.println(sb1.capacity()); // 获取底层数组的总大小
sb1.setCharAt(0, 'H'); // 设置任意位置的字符 Hello world123
sb1.insert(0, "Hello world!!!"); // Hello world!!!Hello world123
System.out.println(sb1);
System.out.println(sb1.indexOf("Hello")); // 获取Hello第一次出现的位置
System.out.println(sb1.lastIndexOf("hello")); // 获取hello最后一次出现的位置
sb1.deleteCharAt(0); // 删除首字符
sb1.delete(0,5); // 删除[0, 5)范围内的字符
String str = sb1.substring(0, 5); // 截取[0, 5)区间中的字符以String的方式返回
System.out.println(str);
sb1.reverse(); // 字符串逆转
str = sb1.toString(); // 将StringBuffer以String的方式返回
System.out.println(str);
}
希望对你有帮助