第13天 String,正则表达式,String 支持正则表达式,object,JavaBean

String

String直接赋值 ,存储在方法区常量池中,是固定的值,不能更改,强制更改只是在常量池中再创建一个空间

new String 对象存储在堆中,通过引用方法取中的常量。String str = newString(“a”);是根据"a"这个String对象再次构造一个String对象;在堆中从新new一块儿内存,把指针赋给栈,将新构造出来的String对象的引用赋给str。 因此 只要是new String(),则,栈中的地址都是指向最新的new出来的堆中的地址,

str1 == str2 是false。str1.equals(str2) 比较的是具体的值所以是true

直接赋值和new string 存储位置的区别
str1和str2都存储在栈中,str2存放的是堆中分配的空间,堆中分配的空间存放的才是常量池中存放ABCD的地址
str1存放的是常量池中ABCD的地址

String str1 = “ABCD” 会创建1(0)个对象
String str2= new String(“ABCD”) 会创建2(1)个对象

str1和str2存放的是两个地址值

注:当字符串常量池中有对象hello时括号内成立!

字符串如果是常量相加,那么先加再在常量池中寻找是否有相加后的这个常量,如果有则地址值相同指向,没有就在常量池中创建,两个常量相加后结果为常量

只要是常量加变量或者是变量加变量,结果就在堆中

static String s1 = "Hello";
static String s2 = "Java";
static String s3 = "Hello"+"Java";
static String s4 = "HelloJava";
static String s5 = s1 + "Java";
static String s6 = "Hello" + s2;
static String s7 = s1 + s2;
static String s8 = (s1 + s2).intern();

在这里插入图片描述

字符串.charAt(索引值):获取字符串中索引处的字符
char[] chars = 字符串.tocharArray(); : 将字符串转换为字符数组

String s = new String(字符数组名,起始索引,截取字符串总共的长度) :截取一部分字符数组转化为字符串
String s = new String(字符数组名):将全部字符数组转化为字符串

字符串1(对象).compareTo(字符串2(参数)):字符串是以字节数组形式存储的,当比较两个字符数组的时候是进行逐位比较,从左到右比较是否相等,相等就跳过,比较下一个,不相等就输出(str1的阿斯克码值-str2的阿斯克码值)并且不再向后比较。

string.join(“分隔符”,“要分割的值”“要分割的值”“要分割的值”)

字符串.contains(“查找是否包含的字符串”)如果包含,返回true

字符串.endsWith(“判断字符串是否以字符结尾”)

字符串.startsWith(“判断字符串是否以字符开始”)

" ".equals();
" ".equalsIgnoreCase;

byte[] bytes = 字符串.getBytes(); 将字符串中的字符转化为字节数组

UTF-8编码下一个汉字占三个字节;
gbk编码下一个汉字占两个字节;

字符串名.toUpperCase() : 将字符变为大写
字符串名.toLowerCase() : 将字符变为小写

字符串的哈希码值是固定的

字符串.indexOf(“要找的字符”,“从哪个索引开始查找”) : 获取要找的字符出现的第一个位置,找不到就返回-1;

字符串.intern():只显示值,不判断类型
字符串.isEmpy :是否是一个空字符串,包含空格
字符串.isBlank() :不包含空格看是否是一个空字符串

str.lastIndexOf(“需要找的字符串”) : 输出在字符串中的最后的位置
str.lastIndexOf(“需要找的字符串”,数字): 从数字之前向左找最近的字符串,如果数字位置恰好在需要找字符串的一部分,则不向前找,直接输出那个位置,即便只有一部分

str.replace(旧字符串,需要替换的新字符串)
str.substring(从这个索引后输出全部字符)
str.substring(1,3) : 从一索引输出,到2索引结束

正则表达式

字符串名.matches(“”)
返回true或者false
. 代表任意字符
\d 代表 [0-9]
\w 代表任意一个单词字符,等同于[a-zA-Z0-9_] 字母数字和下划线
\D 不是数字

[] 中括号表示匹配其中任意一个字符

[abc]? 表示可以匹配a或b或c或者什么也不写,不是a和b和c,其间的内容是或的关系

‘+’ 代表之前的字符至少出现了一次
'*'代表之前的字符可有可无
'?'代表之前的字符最多出现一次

正则数量词

[字符]+{n} : 这个字符恰好出现n次
[字符]+{n,}:这个字符出现n次及以上
[字符]+{n,m}:这个字符最少出现n次,最多出现m次

分组

()使用小括号
(abc){3} 表示abc整体出现3次
(abc|def){3} 表示abc整体或者def整体一共出现3次 abcdefabc




String支持正则表达式方法

matches()

boolean match = 字符串变量名1.matches(正则表达式的字符串变量名2)

//字符串1是否符合正则表达式字符串变量名2,符合返回true,不符合返回false

replaceAll():替换

将当前字符串中满足正则表达式的部分全部替换为指定的字符串

String line = “isudf23231sdgniog2354”
字符串变量1 = 字符串变量1.replaceAll(“正则表达式”,“满足正则表达式部分要替换的字符串”)

split() 拆分

将当前字符串按照满足正则表达式的部分进行拆分,将拆分出的以String[]形式返回,相隔的字符用逗号分隔

String[] 字符串数组名 = 字符串名.split(“正则表达式”)

Array.toString(字符串数组的名)—>将字符串数组转化为字符串

注意:1. 如果正则表达式需要分隔字符串在第一个元素,则在字符串中以空字符串代替,只有一个逗号,前面什么也没有
2. 如果需要分隔的元素在字符串最后,则在输出时忽略
3. 如果有连续两个需要分隔的符号,则会输出一个空字符串

JavaBean

JavaBean的三点规则

  1. 属性都是私有的 private
  2. 提供私有属性对应的getter\setter
  3. 必须有一个无参的构造方法

object

所有类的直接间接继承的类,顶级父类

所有类默认继承Object类
为了多态,向上继承

两个常用的被重写的方法

toString

使用构造方法时,就会输出引用变量,默认会调用Object类的toString()方法
如果直接sout这个引用变量,输出的字符串格式为:类的全称@hashcode值,但这个结果对于我们来说没有意义,我们想要输出的是对象的属性值。使用默认的toString不能满足要求,需要重写Object的toString方法

StringBuilder方法 重写toString方法

public String toString(){}

equals

默认调用object类的equals(),内部还是在用==比较地址,没有参考意义,若想比较new出来的两个对象的属性值是否相同,需要重写equals()来比较属性值是否相同
重写alt+insert equals and hashcode()
重写之后就可以用equals比较属性值是否相等

Object类不能装八种包装类,其他的类都可以装

String和包装类在内部重写了equals,所以用equals比较字符串比较属性值.StringBuileder类没有重写equals(),比较的不是属性值。equals两边的类型要相同

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值