【JavaSE】String类基本用法和常见操作_"string s4=new string( "zhangsan ");"(1)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
img

正文

    String s2 = new String("ac");
    String s3 = new String("ABc");
    String s4 = new String("abcdef");
    System.out.println(s1.compareToIgnoreCase(s2)); // 不同输出字符差值-1
    System.out.println(s1.compareToIgnoreCase(s3)); // 相同输出 0
    System.out.println(s1.compareToIgnoreCase(s4)); // 前k个字符完全相同,输出长度差值 -3

在这里面和3里面描述的compareTo方法只有一点不同,那就是这方法忽略大小写,无论是大写还是小写在内容上是视为一样的


### 🍎2.3 字符串查找


字符串查找也是字符串中非常常见的操作,String类提供的常用查找的方法:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/9984579483564a74b04e1b3f6505f160.png)


详细举例:



    String s = "aaabbbcccaaabbbccc";
    System.out.println(s.charAt(3)); //拿到下标为3的字符--> 'b' (参数必须在合法范围内)
    System.out.println(s.indexOf('c')); //从头到尾第一次遇到字符c的下标--> 6
    System.out.println(s.indexOf('c', 10)); //从下标为10的元素开始往后面找字符,返回找到的第一个c的下标--> 15
    System.out.println(s.indexOf("bbb")); //在s里找bbb的字符串,并且返回第一个b的下标--> 3
    System.out.println(s.indexOf("bbb", 10)); //从下标为10的元素开始往后面找字符串,并且返回第一个b的下标--> 12
    System.out.println(s.lastIndexOf('c')); //从后往前找返回第一次出现的c的位置--> 17
    System.out.println(s.lastIndexOf('c', 10)); //从下标为10的位置开始从后往前找第一次出现字符c的位置--> 8
    System.out.println(s.lastIndexOf("bbb")); //从后往前找字符串bbb的位置,打印最后一个字符的下标--> 12
    System.out.println(s.lastIndexOf("bbb", 10)); //从下标为10的位置开始从后往前找,打印最后一个字符的下标--> 3

看着复杂其实万变不离其宗,都是一个模板刻出来的,所以不用刻意去记,多上手写写代码就熟悉了


### 🍎2.4 转化


1. 数字和字符串转化


1) 数字转字符串  
 只需要借助valueOf()方法即可



    int a = 10;
    String str = String.valueOf(a);
    System.out.println(str);

2)字符串转数字



    String str2 = "1234";
    int ret = Integer.valueOf(str2);
    int ret2 = Integer.parseInt(str2);
    double ret3 = Double.parseDouble(str2);

    System.out.println(ret);//1234
    System.out.println(ret2);//1234
    System.out.println(ret3);//1234.0

2. 大小写转换


小写转换为大写:借助toUpperCase()方法



    String s1 = "hello";
    String s2 = s1.toUpperCase();
    System.out.println(s2);//HELLO

在这里值得注意的是s2并不是在s1的基础上进行转换的,而是new了一个新的对象,在新的对象上进行修改的


大写转换为小写:借助toLowerCase()方法



    String s3 = "HeLlo";
    String s4 = s3.toLowerCase();
    System.out.println(s4);//hello

原有的小写就不会继续转换了,大写转换为小写,小写的保留


3. 字符串转数组



    String s1 = "hello";
    char[] chars = s.toCharArray();
    System.out.println(Arrays.toString(chars));//[h, e, l, l, o]

在这里我们也可以不借助Array.toString方法,而是遍历打印这个字符串


当然也可以把数组转回成字符串



    String s2 = new String(s1);
    System.out.println(s2);//hello

4. 格式化



    //以格式化的形式 转变为字符串
    String s = String.format("%d-%d-%d", 2019, 5,20);
    System.out.println(s);//2019-5-20

### 🍎2.5 字符串替换


使用一个指定的新的字符串替换掉已有的字符串数据,可用的方法如下:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/5de833bd95244254a2edcbe2b41fb7f9.png)


字符串的替换处理:



    String str = "abababababccc";
    String str2 = str.replace('a','h');//将字符a替换成字符h
    System.out.println(str);//abababababccc
    System.out.println(str2);//hbhbhbhbhbccc

在Java当中,所有对字符串本身的操作,都不是在原来的字符串对象上进行操作,因为字符串是不可改变的 (由于字符串是不可变对象, 替换不修改当前字符串, 而是产生一个新的字符串)  
 在字符串的替换里,不仅可以替换单个的字符,也可以替换一串字符串,得用双引号引起来  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/94feee72a3c445a9b3aa08de75d26d5c.png)


前面三个方法是全都替换成你要替换的元素,而最后一个方法只替换第一个你要替换的元素  
 在以后的代码中,是不是能随意用这些库函数呢?


在此提几点建议:


1. 可以用,但是要分明情况,如在面试的时候,我们需要询问清楚可不可以使用
2. 不建议用的情况,如一个代码只需要一个库函数就解决了,一般情况下库函数只是辅助我们来完成题目的


### 🍎2.6 字符串拆分


可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/e3042dbc3e7a42e1a94f70af7c54293a.png)


1. 实现字符串的拆分处理:如按照空格来拆分



    String str = "abc def gh";
    String[] strings = str.split(" ");
    for (String s:strings) {
        System.out.println(s);
    }

![在这里插入图片描述](https://img-blog.csdnimg.cn/a91188c14dc04238bae3f21ec14b8a3b.png)


2. 拆分IP地址:按点来拆分



    String str = "192.168.11";
    String[] strings = str.split("\\.");
    for (String s:strings) {
        System.out.println(s);
    }

![在这里插入图片描述](https://img-blog.csdnimg.cn/7f1595542b3d4f7c96af4c8715af518e.png)


为了按照点号来拆分ip地址,我们首先得转义字符点,就必须加个\,但是\也需要转义,又需要一个\来转义一下!!  
 这个方法里还可以指定切割组数,以此来达到我们的需求(组数不受限制,大了依旧按照显示分割组数)



    String[] strings = str.split("\\.",3);

技巧:  
 1). 字符"|“,”\*“,”+“都得加上转义字符,前面加上 “\”  
 2). 而如果是 “” ,那么就得写成 “\\”  
 3). 如果一个字符串中有多个分隔符,可以用”|"作为连字符  
 解释一下第三点:



    String str = "hahaha bbb&999";
    String[] strings = str.split(" |&");
    for (String s:strings) {
        System.out.println(s);
    }

当我们看到字符串时,我们想先分割空格,然后再在&处分割,这时候就要用|符来把两个分割标准符分开来  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/4847144548664895b03efb8d94bae800.png)


3. 多次拆分



    String str = "name=zhangsan&age=18";
    String[] strings = str.split("&");//第一次拆分
    for (String s:strings) {
        String[] s1 = s.split("=");//第二次拆分
        for (String x:s1) {
            System.out.println(x);
        }
    }

如上字符串就会被&和=拆分  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/feda5a8857054c90af7ab3a74b7061e3.png)


就是在原来的分割基础上进行嵌套分割


### 🍎2.7 字符串截取


从一个完整的字符串之中截取出部分内容。可用方法如下:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/c0d844c61bf04e4eb4821639ed49f402.png)



    String str = "abcdefg";
    String ret = str.substring(2);//从2下标开始截取,取后半部分 -->cdefg
    String ret1 = str.substring(2,5);//从2下标开始截取,到5下标,区间左闭右开 -->cde
    System.out.println(ret);
    System.out.println(ret1);

注意:


1. 索引从0开始
2. 注意前闭后开区间的写法, substring(0, 5) 表示包含 0 号下标的字符, 不包含 5 号下标(区间左闭右开)(范围还要合法)


### 🍎2.8 其他操作方法


![在这里插入图片描述](https://img-blog.csdnimg.cn/bf9bfdc2fa5e4645b4afa7e51d3a1a09.png)



    String str = " abc def ";
    System.out.println(str.trim());

打印结果就只保留字符串中间的空格,两边空格去掉


### 🍎2.9 字符串常量池


#### 🍒2.9.1 创建对象的思考



    String str1 = "hello";
    String str2 = "hello";
    String str3 = new String("hello");
    System.out.println(str1 == str2);//true
    System.out.println(str1 == str3);//false

在这里插入图片描述


通过上述代码我们可以看到str1和str2引用的对象相同,而str1和str3引用的对象却不是,在Java程序中,类似于:1, 2, 3,3.14,“hello”等字面类型的常量经常频繁使用,为了使程序的运行速度更快、更节省内存,Java为8种基本数据类型和String类都提供了常量池(StringTable)。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/f4c72a1c2c454cf2a681cecc2ed8eb9d.png)


为了节省存储空间以及程序的运行效率,Java中引入了:


1. Class文件常量池:每个.Java源文件编译后生成.Class文件中会保存当前类中的字面常量以及符号信息
2. 运行时常量池:在.Class文件被加载时,.Class文件中的常量池被加载到内存中称为运行时常量池,运行时常量池每个类都有一份
3. 字符串常量池  
 此处简单了解下,后序在写JVM时会再详细介绍


#### 🍒2.9.2 字符串常量池(StringTable)


字符串常量池在JVM中是StringTable类,实际是一个固定大小的HashTable(一种高效用来进行查找的数据结构,后序给大家详细介绍),不同JDK版本下字符串常量池的位置以及默认大小是不同的:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/6dbe63b060c846418b6cea595c941757.png)


注意:


1. 在JVM中字符串常量池只有一份,是全局共享的
2. 刚开始字符串常量池是空的,随着程序不断运行,字符串常量池中元素会越来越多
3. 当类加载时,字节码文件中的常量池也被加载到JVM中,称为运行时常量池,同时会将其中的字符串常量保存在字符串常量池中
4. 字符创常量池中的内容:一部分来自运行时常量池,一部分来自程序动态添加


#### 🍒2.9.3 再谈String对象创建


在我们前面讲到过,创建对象有三种方法


1. 直接使用字符串常量进行赋值  
 在这里提及一个特殊情况:



    String str1 = "hello";
    String str2 = "he"+"llo";//常量在编译的时候,就直接视为hello了
    System.out.println(str1 == str2);//true

    String str3 = "he";
    String str4 = "llo";
    String str5 = str3 +str4;//str3和str4是变量,在编译的时候,还不知道里面的内容
    System.out.println(str1 == str5);//false


**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)**
![img](https://img-blog.csdnimg.cn/img_convert/52d03b269cc1458842cf8c4dfbf6b1d8.png)

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

        String str4 = "llo";
        String str5 = str3 +str4;//str3和str4是变量,在编译的时候,还不知道里面的内容
        System.out.println(str1 == str5);//false

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
[外链图片转存中…(img-uhyHlzET-1713343925079)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值