【JAVA |String类】JAVA中的String类常见用法详解

✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 
🎈🎈作者主页: 🎈丠丠64-CSDN博客🎈


✨✨ 帅哥美女们,我们共同加油!一起进步!✨✨ 

目录

一、前言

二、字符串常量

三、String类型

四、字符串构造

1.使用常量串进行构造

2.使用new String对象

3.使用字符数组进行构造

四、String对象的比较

1.==比较是否引用同一对象

2.boolean equals(Object anObject) 方法:按照字典序比较

3.int compareTo(String s) 方法: 按照字典序进行比较

4.int compareToIgnoreCase(String str) 方法:忽略大小写

五、字符串查找

六、转换

1.数值和字符串转化

​编辑

2.大小写转换

3.字符串转数组

​编辑

4.去字符串中的左右空格

七、字符串替换

八、字符串拆分

九、字符串截取

​编辑

十、StringBuilder和StringBuffer


一、前言

在JAVA中的字符串存储是可以直接使用String这个引用数据类型,不像C语言表示字符串只能使用字符数组或者字符指针,使我们操作起来更方便,更符合不符合面相对象的思想。


二、字符串常量

String类对象的直接赋值: 将一个匿名对象设置一个具体的引用,相当于开辟一个栈内存,指向这个匿名对象,这个匿名对象是存在堆内存的。

String arr1 = "abcd";
String arr2 = "abcd";

所以相同的字符串常量可以有多个对象指向


三、String类型

String是引用类型,内部并不存储字符串本身,我们来看一下String类的实现源码,字符串实际保存在char类型的数组中,并且final修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内容是可以修改的

看这样一段代码,大家可能大家会想到这个是在arr1的自身增加了一段字符串
String arr1 = new String("abcd");
arr1 += "ooooo";
System.out.println(arr1);
但是他的实现过程却是新对象
所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象, 尽量避免直接对 String 类型对象进行修改,因为 String 类是不能修改的,所有的修改都会创建新对象,效率 非常低
如果要修改建议尽量使用StringBuffer 或者 StringBuilder

四、字符串构造

常用的构造方法下面三种构造方法


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 类重写了父类 Object equals 方法,只比较字符串的内容,相同返回true,不同返回false
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) 方法: 按照字典序进行比较

compareTo 返回的是 int 类型,大于返回一个大于0的数字,小于返回小于0的数字。相等返回0.
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

八、字符串拆分

可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串,以字符串数组形式存储
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

由于 String 的不可更改特性,为了方便字符串的修改, Java 中又提供 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);
}
String StringBuilder 最大的区别在于 String 的内容无法修改,而 StringBuilder 的内容可
以修改 。频繁修改字符串的情况考虑使用 StringBuilder

希望对你有帮助

  • 36
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值