Java-String各种功能以及用法

前言

我们在C语言中已经学习了字符串的各种用法,在JAVA这种将数据和操作数据方法分离的方式不符合面向对象的思想,而字符串又很广泛,因此JAVA语言专门提供了String类。

❤ 构造方法

String提供的否早方法非常多,常用的就三种:

public static void main(String[] args) {
// 使用常量串构造
        String s1 = "hello bit";
        System.out.println(s1);
// 直接newString对象
        String s2 = new String("hello bit");
        System.out.println(s1);
// 使用字符数组进行构造
        char[] array = {'h','e','l','l','o','b','i','t'};
        String s3 = new String(array);
        System.out.println(s1);
}

注意
下面这个代码可以看到

public static void main(String[] args) {
        String s1 = new String("hello");
        String s2 = new String("world");
        String s3 = s1;
        System.out.println(s1.length()); // 获取字符串长度---输出5
        System.out.println(s1.isEmpty()); // 如果字符串长度为0,返回true,否则返回false
}

s1和s2引用的是不同对象 s1和s3引用的是同一对象

🧡对象的比较

0️⃣compare和equals

在JAVA中我们会对两个字符串进行比较

public static void main2(String[] args) {
        String str1 = new String("Hello");
        String str2 = new String("hello");
        System.out.println(str1.compareTo(str2));
        System.out.println(str1.compareToIgnoreCase(str2));
        System.out.println("=============");
        System.out.println(str1.equals(str2));
        System.out.println(str1.equalsIgnoreCase(str2));
    }

我们来看看运行结果
在这里插入图片描述

总结

equals返回的是boolean类型,而compareTo返回的是int类型
第一种是比较两个字符串字母之间的差,加上IgnoreCase是忽略一些情况比如说大小写等进行比较。
第二种才是字符串之间的比较,相同则为真,相异则为假。

1️⃣==的比较

public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = 10;
        System.out.println(a == b); // false
        System.out.println(a == c); // true
        System.out.println("========================");
        String s1 = new String("hello");
        String s2 = new String("hello");
        String s3 = new String("world");
        String s4 = s1;
        System.out.println(s1 == s2);
        System.out.println(s2 == s3);
        System.out.println(s1 == s4); 
    }

我们来看结果
在这里插入图片描述

总结

对于基本类型变量,==比较两个变量中存储的值是否相同
对于引用类型变量,==比较两个引用变量引用的是否为同一个对象

💛字符串查找

字符串查找在JAVA中又很多中方法我们举部分例子
比如说:

 public static void main(String[] args) {
        String str1 = "hello";
        char ch = str1.charAt(1);
        System.out.println(ch);
    }

我们来看结果
在这里插入图片描述
这里面charAt(1)查找的就是这个字符串位置为1的那个字符,和数组下标一样,很好理解
各大方法总结在表格中:
在这里插入图片描述
代码实验如下:

 public static void main(String[] args) {
        String s = "aaabbbcccaaabbbccc";
        System.out.println(s.charAt(3)); 
        System.out.println(s.indexOf('c'));
        System.out.println(s.indexOf('c', 10));
        System.out.println(s.indexOf("bbb")); 
        System.out.println(s.indexOf("bbb", 10)); 
        System.out.println(s.lastIndexOf('c'));
        System.out.println(s.lastIndexOf('c', 10)); 
        System.out.println(s.lastIndexOf("bbb")); 
        System.out.println(s.lastIndexOf("bbb", 10));  
    }

运行结果:
在这里插入图片描述

💚转化

0️⃣数值和字符串转化

public static void main(String[] args) {
        // 数字转字符串
        String s1 = String.valueOf(1234);
        String s2 = String.valueOf(12.34);
        String s3 = String.valueOf(true);
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
        System.out.println("=================================");
         // 字符串转数字
         // 注意:Integer、Double等是Java中的包装类型,这个后面会讲到
        int data1 = Integer.parseInt("1234");
        double data2 = Double.parseDouble("12.34");
        System.out.println(data1);
        System.out.println(data2);
    }

运行结果:
在这里插入图片描述
再简洁一些:

public static void main(String[] args) {
        String str2 = String.valueOf(123);
        System.out.println(str2);
        String str1 = "234";
        String str3 = "456";
        int data = Integer.parseInt(str1);
        double data2 = Double.parseDouble("678");
        System.out.println(data2);
        float data4 = Float.parseFloat(str1);
        System.out.println(data);
    }

在这里插入图片描述
这是不同类型之间的写法

1️⃣大小写转换

public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "HELLO";
// 小写转大写
        System.out.println(s1.toUpperCase());
// 大写转小写
        System.out.println(s2.toLowerCase());
    }

运行结果:
在这里插入图片描述

3️⃣字符串和数组转化

 public static void main(String[] args) {
        String s = "hello";
// 字符串转数组
        char[] ch = s.toCharArray();
        for (int i = 0; i < ch.length; i++) {
            System.out.print(ch[i]);
        }
        System.out.println();
        System.out.println("===================");
// 数组转字符串
        String s2 = new String(ch);
        System.out.println(s2);
    }

在这里插入图片描述

4️⃣格式化

public static void main(String[] args) {
        String s = String.format("%d-%d-%d", 2019, 9,14);
        System.out.println(s);
}

在这里插入图片描述

💙字符串拆分

可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串。方法如下:

在这里插入图片描述

代码示例:

0️⃣多次拆分

public static void main5(String[] args) {
        String str1 = "192\\168\\0\\1";
        String str2 = "192&168=1";
        String[] str = str2.split("&|=");
        for (int i = 0; i < str.length; i++) {
            System.out.println(str[i]);
        }// 不同的符号用|来分割,这样实现两个符号分割字符串

        String[] strs = str1.split("\\\\");
        for (int i = 0; i < strs.length; i++) {
            System.out.println(strs[i]);
        }// 我们在分割的时候需要进行转译,转译的时候必须加两个斜杠也就是\\
    }

1️⃣按照空格拆分

public static void main(String[] args) {
        String str = "hello world hello x" ;
        String[] result = str.split(" ") ; // 按照空格拆分
        for(String s: result) {
            System.out.println(s);
        }
    }

运行结果:
在这里插入图片描述

2️⃣字符串部分拆分

public static void main(String[] args) {
        String str = "hello world hello x";
        String[] result = str.split(" ", 2);
        for (String s : result) {
            System.out.println(s);
        }
    }

在这里插入图片描述
总结

(1) 如果一个字符串中有多个分隔符,可以用"|“作为连字符.
(2) 我们在分割的时候需要进行转译,转译的时候必须加两个斜杠也就是\ \也就是说如果是 \ ,那么就得写成 \ \ \ \
(3) 字符”|“,”*“,”+"都得加上转义字符,前面加上 \ \ .

💜字符串截取

0️⃣截取

即将一个完整的字符串之中截取出部分内容

public static void main(String[] args) {
        String str = "helloworld";
        System.out.println(str.substring(5));
        System.out.println(str.substring(0,5));
    }

第一种是从某个位置开始截取后面所有的字符串,第二种是截取一个区间。运行结果如下:
在这里插入图片描述

1️⃣删除空格

 public static void main(String[] args) {
        String str = "  heklo world   ";
        System.out.println(str);
        String ret = str.trim();
        System.out.println(ret);//消除空格,只能消除左右两个空格
    }

结果:
在这里插入图片描述

总结

trim只能消除字符串开头和结尾的空白字符,中间的空格不能消除

🤎字符串的不可变性

我们刚刚说得对字符串的修改都是对新的对象进行操作,旧的字符串是不会变的,主要原因是双引号 “ ”内部是一个常量值,储存在堆上,我们举个例子画个图来理解:
在这里插入图片描述
我们分四步来分析:

(1)这段代码很显然str1 == str2 结果为false。
(2)所有双引号里面的字面值都会放在常量池里面,假设str1在常量值里面存储的位置是0x7;
(3)str2里面的abcd应当也存储在常量池里面,但是常量池里面已经有了,就不会再存储一份了。new一个假设是0x8;
(4)最后我们再比较str1和str2的时候比较的是0x7和0x8所以并不相等,所以是false

第二种代码我们看:
在这里插入图片描述

str1 == str3结果为true。
这是因为str3会分配一块内存,把常量值里面的地址给它,因此是true存的也是0x7。

总结

双引号引起来的值就存在字符串常量池当中,如果有,就不存储,直接返回字符串常量池的对象即可。

(1)字符串不可变是因为其内部保存字符的数组被final修饰了,因此不能改变。
这种说法是错误的,不是因为String类自身,或者其内部value被final修饰而不能被修改。

(2)final修饰类表明该类不想被继承,final修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内容是可以修改的。

🖤StringBuilder

0️⃣字符串逆置

public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder("abc");
        System.out.println(stringBuilder);

        stringBuilder.reverse();
        System.out.println(stringBuilder);
    }

这样我们可以直接实现字符串的逆置:
在这里插入图片描述

1️⃣字符串拼接

字符串的拼接需要创建一个StringBuilder的对象

public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder("abc");
        System.out.println(stringBuilder);

        stringBuilder.append("123").append(10);
        stringBuilder.append(19.9);

        System.out.println(stringBuilder);

在这里插入图片描述
此时不会缠身临时变量,所有的方法返回的都是this。因此String的内容不可修改,但是StingBuilder的内容可以修改

2️⃣StringBuilder方法

以下涵盖了所有StringBuilder的方法,具体用可以做为参考:
在这里插入图片描述
注意:String和StringBuilder类不能直接转换。如果要想互相转换,可以采用如下原则:

(1)String变为StringBuilder: 利用StringBuilder的构造方法或append()方法
(2)StringBuilder变为String: 调用toString()方法。

即:

 String ret = stringBuilder.toString();//将stringBuilder对象变成字符对象

这样就可以把对象变成String。

3️⃣Builder和Buffer区别

⭕StringBuffer与StringBuilder大部分功能是相似的
⭕StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作。即多线程用StringBuffer更安全。

🤍总结

以上基本上就是有关String的全部内容了。各种用法以及佛那个功能的总结。希望可以和大家一起学习。最后希望🐏的在日康复。未来可期。


在这里插入图片描述

HysteriaD
关注 关注
  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
17
原创
120
点赞
111
收藏
47
粉丝
关注
私信
写文章

热门文章

  • Java之类和对象(超超超详解) 1910
  • 图书管理系统(Java) 1884
  • 通讯录管理系统(静态)实现详解 1081
  • 数据结构—动态顺序表 911
  • 数据结构-栈详解(大概) 825

最新评论

  • Java之类和对象(超超超详解)

    要奥奥不要利利: 写的挺好的呀表情包

  • JavaEE--多线程(续)安全问题

    HysteriaD: 感谢大佬支持,向大佬学习表情包

  • JavaEE--多线程(续)安全问题

    魚小飛: 详细好文 学习一波表情包

  • 进程or线程?计算机是如何工作的

    嘿嘿嘿740: 大佬好棒表情包

  • Java-String各种功能以及用法

    HysteriaD: 感谢支持表情包

最新文章

  • JavaEE--文件IO
  • JavaEE--多线程(续)安全问题
  • 进程or线程?计算机是如何工作的
2023年3篇
2022年14篇

目录

目录

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家工艺玻璃钢雕塑代理价格云南昆明玻璃钢雕塑厂家玻璃钢花盆模具六角盆冬季商场外围美陈氛围布置仪征玻璃钢雕塑保定玻璃钢马雕塑玻璃钢小动物雕塑多少钱湛江玻璃钢雕塑卡通滨州小品系列玻璃钢雕塑价格佛山古代玻璃钢雕塑黑河卡通玻璃钢雕塑安装玻璃钢雕塑的独特优势商场美陈方案dp点江苏多彩玻璃钢雕塑销售厂家六安抽象玻璃钢雕塑市场杭州仿铜玻璃钢雕塑玻璃钢海豚雕塑介绍玻璃钢雕塑怎么发货雨花商场中秋美陈金山区拉丝玻璃钢雕塑免费咨询黄山玻璃钢雕塑设计玻璃钢雕塑人物相宁波个性化玻璃钢雕塑珠海玻璃钢子母座椅雕塑曲阳玻璃钢彩绘雕塑青原玻璃钢雕塑厂家小品玻璃钢卡通雕塑有哪些萝岗仿真玻璃钢人物雕塑玻璃钢动物雕塑型号慈云寺商场美陈香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化