JAVA程序员笔记第005篇—字符串

本文主要探讨了Java中的字符串定义,包括字面量和new关键字的使用,以及字符串驻留机制。同时讲解了字符串拼接的不同方式,推荐在大量拼接时使用StringBuilder。此外,还介绍了String类的一些重要方法,如charAt、equals、compareTo等,以及字符串处理的实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字符串

字符串定义:

1.用 " 字符串内容 " 引起来的内容
2.用 三个 " " " 多行内容 " " "定义多行字符串(JDK-13新特性)
3.new String() 来构建字符串
字符串注意事项:

  • 通过字面量(" "双引号)定义的字符串对象 ,来自于 字符串的 串池
  • new String 构建的对象 来自于 堆空间
    new代表新建,每次通过new构建对象,地址都不相同
字符串串池:

JVM会在串池里放一些常用的字符串,当使用String s1 = “常用字符串”; 会自动加载串池中的字符串,而不是在堆空间中new一个新对象

这里找了个串池详解:
https://www.cnblogs.com/fangfuhai/p/5500065.html
转载自原作者:风中程序猿
转载,如有侵权,本人会自行删除

前面学运算符中 的 == 的作用:
  • 对于基本数据类型而言,就是比较两个是否相等
  • 对于引用数据类型而言, 使用来比较两个变量 指向的地址是否相等
		String s1 = "hello word\n";
        //JDK-13的新特性
        String s2 = """
                	hello word
                """;
        String s3 = new String();
        String s4 = "";
        String s5 = new String("hello word");
        String s6 = new String("hello word");

        System.out.println(s1 == s2);//s2有换行符
        System.out.println(s3 == s4);//
        System.out.println(s5 == s1);
        System.out.println(s5 == s6);//内容相同 地址值不同

字符串的拼接(使用 +):

1.字符串 是不可改变的
2.两个字符串字面量相加,编译器会直接将其合并,从串池中获取
3.字符串(包含变量)相加,每次拼接 编译器会构建StringBuilder 进行 append

一般情况下 + 也可以,但在循环中,或需要频繁拼接字符串是,其会产生很多对象,性能低不推荐使用 +
推荐使用StringBuilder
因为 + 的底层也是使用StringBuilder的append来实现的。但是如果是循环拼接,那么系统会在循环体内部创建StringBUilder,这样会造成空间浪费

String的常见方法:

★ charAt(index)

获取指定索引位置的字符

isEmpty(index)

字符串是否长度为 0

isBlank(index)

字符串是否为空(包含空白字符)

codePointAt(index)——JDK15新特性

获取指定索引位置的字符码

getBytes(charset)

将字符串按指定编码转为流

★ equals(obj)/equalsIgonreCase(str)

判断两个字符串 内容 是否相同
第二个是,忽略大小写 判断

  • 比较两个字符串的时候,其中有一个 字符串时字面量时 推荐使用 字面量 去和 变量比较
    因为变量可能是null,null代表 什么都没有,不能调用方法(非静态方法)因为会产生空指针异常

compareTo(str)

判断字符串的大小

  • 逐个字符进行Unicode编码的比较
    返回 > 0 ,前者比后者大
    返回 0 ,前者、后者一样大
    返回 < 0 ,前者比后者小

startsWith(str)/ endsWith(str)

判断字符串是否以 … 开头/结尾

contains(str)

是否包含某个指定的子串

indexOf(str) / lastIndexof(str)

搜索 str 在字符串中的索引位置

  • 从前找 / 从后找 指定搜索内容,只返回第一次检索到内容时,其对应的角标;
    返回 -1 代表没有找到

substring(offset , endIndex)

从字符串指定位置截取字符串,截取到指定位置不包含endIndex 对应的字符

  • 若不传入endIndex,默认截取到最后
  • 截取时 前包后不包 例如:截取前三位 [0,3) 代表截 0,1,2位

replace(oldstr , newstr)
replaceAll(regex, newstr)

替换全部满足条件字符串

replaceFirst(regex, newstr)

替换第一个匹配的字符串

matches(regex) JDK14

是否匹配某个正则

split(regex , max=0)

拆分字符串, max允许拆分的最大次数,如果不设置,或者设置为 <=0 代表 全部拆分

  • 返回值是数组 String[]
  • 下图,拆分时可能误拆,这时可以设置拆分次数
    在这里插入图片描述

toLowerCase() / toUpperCase()

字符串 转为 小写/大写

trim()
strip() JDK11

trim()方法移除字符串两侧的空白字符(空格、tab键、换行符)
trim()方法无法删除掉Unicode空白字符,
但用Character.isWhitespace©方法可以判断出来
strip() 可以去掉 Unicode空白字符

toCharArray()

转为字符数组

repeat(n) JDK11

重复 N次

format

格式化字符串
String str=String.format(“这天:%s叫%s去打%s”,“老李”,“老王”,“老张”);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值