当前位置: 首页 > news >正文

Java基础-String常用的方法

String常用的三种构造方法

    public static void main(String[] args) {//1.使用常量字符串构造String s1 = "1.Hello world";System.out.println(s1);//2.使用new关键字构造String s2 = new String("2.Hello world");System.out.println(s2);//3。使用字符数组构造char[] ch = {'H','e','l','l','o'};String s3 = new String(ch);System.out.println(s3);//输出字符串长度System.out.println(s1.length());System.out.println("hello".length());//字符串中这种写法也是ok的//判断字符串长度是否为0System.out.println(s1.isEmpty());//输出false/*String s4 = null;System.out.println(s4.isEmpty());//会报空指针错*/String s5 = "";//字符串为0返回trueSystem.out.println(s5.isEmpty());}
  • 字符串是引用型变量,变量需要用“”一对双引号引起来 
  • null和字符串为0不是一个概念

介绍String对象中四种常见的比较

日常中,遇到字符串比较的情况还是比较多的;"=="对于String这种引用型变量来说,比较的是一个哈希地址,是比较不了字符串中的内容是否相等的:

    public static void main(String[] args) {String s1 = new String("abc");String s2 = new String("abc");String s3 = s1;System.out.println(s1 == s2);//falseSystem.out.println(s1 == s3);//true}

由结果可见,s1和s2是两个不同的对象,自然的地址也不同,用"=="去比较输出的结果固然是false,可以理解成"=="比较两个引用变量引用的是否为同一个对象;

那么如何可以比较字符串中的内容是否相等呢?我们引出了equals()方法(按照字典序比较);在使用equals的时候,String类重写了父类Object中equals()方法,使得可以比较字符串内的内容。

而equals方法返回的是一个布尔值,我们并不知道字符串之间的关系,所以我们引入了返回int类型的compareTo()方法,也是同样的按照字典序比较:

     

    值得注意的是它的比较规则:

    1. 先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值
    2. s1>s2返回大于0的数字;s1=s2返回0;s1<s2返回小于0的数字
    3. 返回值是对应字符ASCII码的差值

    那么如果我们需要忽略大小写的比较又该用哪一个方法呢?比如我们文件名或扩展名检查、用户名或密码的校验,通常都是需要忽略大小写来增加灵活性的,可以用compareToIgnoreCase(String str) 方法;这个方法和compareTo()的使用方法和规则是一样的,只是它忽略大小写去对字符串进行比较;

    字符串查找String提供的部分常用方法

    以下是部分常用的方法及使用的规则案例:

     

     

    字符串转换

    1.其他数据类型转换成字符串用 valueOf方法:

     

    2.字符串的大小写转换toUpperCase()&toLowerCase()

    3. 字符串转数组用toCharArray()

    public static void main(String[] args) {//字符串转数组String s1 = "hello world";char[] ch = s1.toCharArray();for (int i = 0; i < ch.length; i++) {System.out.println(ch[i]);}//数组转字符串,直接使用String转就好String s2 = new String(ch);System.out.println(s2);}

     4.格式化字符串用到format()

     字符串的替换:

    注意:针对这种直接赋值没有对象的字符串,在Java中会又一块特殊的字符串常量池,存放他们;字符串常量池中不会存在两个一样的字符串,如果两个字符串一样的画它们的地址值是一样的;

    字符串拆分

        public static void main(String[] args) {String str = "abc def Good evening";//1.将字符串全部拆分String[] result = str.split(" ");//按空格for (String res:result){System.out.println(res);}System.out.println("==========================");//2.部分拆分String[] result2 = str.split(" ",3);for (String res2:result){System.out.println(res2);}//3.有特殊字符的字符串分割要记得加上转义符String str2 = "192.168.1.1" ;String[] result3 = str.split("\\.") ;//转义符for(String s: result) {System.out.println(s);}}

     

    1. 部分拆分时,程序不会根据字符串的长短去平均分;而是根据先后顺序,分成相应的份数,后面的就不分了
    2. 有些特殊字符作为分割符可能无法正确切分, 需要加上转义
    3. 字符"|","*","+"都得加上转义字符,前面加上 "\\"
    4. 如果是 "\"需要拆分 ,那么就得写成 "\\\\"
    5. 如果一个字符串中有多个分隔符,可以用"|"作为连字符

     以上所有涉及到修改字符串内容的操作都是创建一个新对象,改变的是新对象,而不是在原有的字符串上改动,不管是字符串转换、格式化又或时字符串截取等等,原有的字符串还是原来的,而修改后的字符串是一个新的字符串对象;

    似上面这种修改字符串的情况,如果放在循环里面每次循环都会创建一个新的对象,产生比较多的临时对象,对程序来说效率是比较低的,我们在使用的时候也需要尽量避免直接对String类型对象进行修改,因为String类是不能修改的,所有的修改都会创建新对象,效率非常低下。

     那么如果想要修改字符串中内容,该如何操作呢?于是有了StringBuilder和StringBuffer类

    StringBuilder和StringBuffer类

    StringBuilder和StringBuffer类是为了方便字符串的直接修改而产生的这两个类大部分功能是相同的,不同的是StringBuilder会比较经常用在单线程的问题上,而StringBuffer会用更多的应用到多线程的问题上。下面是一些比较常用的方法,大部分都是和String当中的方法重合的

    String、StringBuffer、StringBuilder的区别

    • String是字符串常量不可变的,一旦创建就不能修改,任何对String的操作都会创建新的字符串对象。而StringBuilder和StringBuffer是可变的。

    • StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作;在安全操作方面StringBuffer>StringBuilder>String

    • StringBuilder和StringBuffer类大部分功能相同


    感谢大家阅读📚点赞👍收藏⭐评论✍关注❤

    博客主页: 【长毛女士-CSDN博客

    水平有限,欢迎大家纠错啦♥

    http://www.xdnf.cn/news/1105939.html

    相关文章:

  1. 隆重介绍 Xget for Chrome:您的终极下载加速器
  2. Linux入门篇学习——Linux 编写第一个自己的命令,make 工具和 makefile 文件
  3. 嵌入式八股文之 GPIO
  4. 鸿蒙系统安全机制全解:安全启动 + 沙箱 + 动态权限实战落地指南
  5. 【驱动】移植CH340驱动,设置 udev 规则,解决和 BRLTTY 的冲突
  6. Word表格默认格式修改成三线表,一劳永逸,提高生产力!
  7. FREERTOS根本不能使用连续接收串口思想
  8. P4597 序列 sequence题解
  9. 跟着Carl学算法--二叉树【3】
  10. 猿人学js逆向比赛第一届第十九题
  11. 【每日算法】专题八_分治_归并排序
  12. RLHF:人类反馈强化学习 | 对齐AI与人类价值观的核心引擎
  13. Windows解决 ping 127.0.0.1 一般故障问题
  14. 阿里云服务器,CentOS7.9上安装YApi 接口管理平台
  15. Redis概念和基础
  16. AI基建还能投多久?高盛:2-3年不是问题,回报窗口才刚开启
  17. 学习C++、QT---21(QT中QFile库的QFile读取文件、写入文件的讲解)
  18. MySQL内置函数(8)
  19. Windows删除文件或者拔出U盘显示正在使用/占用解决办法
  20. 必备软件推荐:1、Everything:Windows 文件查找的终极利器
  21. CSS和CSS3区别对比
  22. [面试] 手写题-插入排序
  23. 网络安全第一次作业
  24. 史上最详细Java并发多线程(面试必备,一篇足矣)
  25. 视频翻译用什么软件?这里有5个高效推荐
  26. 论迹不论心
  27. 【天坑记录】cursor jsx文件保存时错误格式化了
  28. 并发编程
  29. C#元组:从基础到实战的全方位解析
  30. 【C++类】