当前位置: 首页 > 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.lryc.cn/news/585400.html

    相关文章:

  1. 用AI做带货视频评论分析【Datawhale AI 夏令营】
  2. 进程管理中的队列调度与内存交换机制
  3. MinIO配置项速查表【五】
  4. 云原生周刊:镜像兼容性
  5. 「Linux命令基础」Shell命令基础
  6. 从零到一:深度解析汽车标定技术体系与实战策略
  7. React 的常用钩子函数在Vue中是如何设计体现出来的。
  8. WinForm三大扩展组件:ErrorProvider、HelpProvider、ToolTipProvider详解
  9. Apache Cloudberry 向量化实践(二):如何识别和定位向量化系统的性能瓶颈?
  10. 资源分享-FPS, 矩阵, 骨骼, 绘制, 自瞄, U3D, UE4逆向辅助实战视频教程
  11. Oracle 数据库 Dblink
  12. PySpark中python环境打包和JAR包依赖
  13. tensor
  14. Word表格默认格式修改成三线表,一劳永逸,提高生产力!
  15. 上位机知识篇---高效下载安装方法
  16. 05 rk3568 debian11 root用户 声音服务PulseAudio不正常
  17. PyTorch 与 Spring AI 集成实战
  18. 2025Nginx最新版讲解/面试
  19. 【yolo】模型训练参数解读
  20. 七、gateway服务创建
  21. WPS、Word加载项开发流程(免费最简版本)
  22. [Meetily后端框架] 多模型-Pydantic AI 代理-统一抽象 | SQLite管理
  23. VLLM部署DeepSeek-LLM-7B-Chat 模型
  24. Lecture #19 : Multi-Version Concurrency Control
  25. Jenkins 版本升级与插件问题深度复盘:从 2.443 到 2.504.3 及功能恢复全解析
  26. FPGA实现SDI转LVDS视频发送,基于GTX+OSERDES2原语架构,提供2套工程源码和技术支持
  27. Java进阶---并发编程
  28. 【C/C++ shared_ptr 和 unique_ptr可以互换吗?】
  29. 【AI News | 20250710】每日AI进展
  30. 一个中层管理者应该看什么书籍?