当前位置: 首页 > 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.dtcms.com/a/274717.html

    相关文章:

  1. 关于MySql索引,你需要知道!!!
  2. CompletableFuture 详解
  3. Java教程:JavaWeb ---MySQL高级
  4. Flutter 箭头语法
  5. 【世纪龙科技】新能源汽车结构原理教学软件-几何G6
  6. OpenCV多种图像哈希算法的实现比较
  7. 中国国际会议会展中心模块化解决方案的技术经济分析报告
  8. C++中的智能指针(1):unique_ptr
  9. 在Python项目中统一处理日志
  10. javaweb之相关jar包和前端包下载。
  11. AGX Xavier 搭建360环视教程【一、先确认方案】
  12. Kafka——应该选择哪种Kafka?
  13. 三种方法批量填充订单表中的空白单元格--python,excel vba,excel
  14. 【深度学习新浪潮】图像生成有哪些最新进展?
  15. linux-base-end
  16. 从《哪吒 2》看个人IP的破局之道|创客匠人
  17. NodeJs后端常用三方库汇总
  18. css——width: fit-content 宽度、自适应
  19. lesson10:Python的元组
  20. UI前端与数字孪生结合实践探索:智慧农业的精准灌溉系统
  21. FastAPI + SQLAlchemy (异步版)连接数据库时,对数据进行加密
  22. C++(STL源码刨析/List)
  23. [Meetily后端框架] Whisper转录服务器 | 后端服务管理脚本
  24. 如何从0开始构建自己的第一个AI应用?(Prompt工程、Agent自定义、Tuning)
  25. MyBatis:SQL与Java的智能桥梁
  26. Ant Design ProTable组件深度解析
  27. CUDA —— 2.3、cuda静态全局变量__device__使用介绍(附:完整代码)
  28. 系统思考:多元胜过能力
  29. 计算机网络第三章(5)——数据链路层《广域网》
  30. 解锁形状与空间的奥秘:微分几何与流形一瞥-AI云计算拓展核心内容