先写String,至于其他两个过两天吧再
1. String
特点:
a. java.lang.String 构建字符串对象 "aa" "12" "中文" 字符串常量
b. 字符串是常量;它们的值在创建之后不能更改 private final char value[];
c. String类提供了很多非常好用的方法
d. 字符串可以使用+进行连接
e. 字符串String类型本身是final声明的,意味着我们不能继承String
f. 字符串的对象也是不可变对象,意味着一旦进行修改,就会产生新对象
g. String对象内部是用字符数组进行保存的
h. 字符串常量存储在常量池 --> 常量池在内存的那个区域呢? 方法区--> 堆内存 --> 元空间(电脑的内存)
2. String类对象的创建方式
a. String str="";
b. String类的构造器
new String();//创建一各空串对象 this.value="".value
new String("html5");//创建一个指定字符串内容对象 this.value="html5".value
==不能判断new的String对象
new String(char[] c);//将char数组中全部字符构成字符串对象
new String(char[] c,int offset,int count);将char数组中部分字符构成字符串对象
offset 起始索引值位置
count 字符个数
new String(byte[] b);将byte数组中的数据构建成字符串对象 (ASCII) 默认采用平台字符集
new String(byte[] b,int offset,int length);将byte数组中部分字符构成字符串对象
offset 起始索引值位置
length 字节个数
new String(byte[] b,Charset charset); 指定字符集进行处理
c. 静态方法
valueOf(); 基本数据类型--->String
d. ""+对象|基本数据类型

3. 字符串对象的个数
String str1="java";//常量池中一个对象
String str2=new String("python");//堆内存中有一个String类的对象,在常量池中有一个"python"对象
4. 字符串拼接内存存储位置
常量+常量 结果在常量池
变量+变量 结果在堆内存
变量+常量 结果在堆内存
如果调用intern方法,结果就会在常量池中
这个字串的拼接和new对象还不一样
关于常量池的问题:
(1)JDK1.6及其之前:方法区
(2)JDK1.7:堆
(3)JDK1.8:元空间 元空间是在内存中,但是在JVM之外的内存
String中的各种方法查阅官方的API里面啥都有,解释的比我全
部分方法
1. String字符串的对比
a. equals方法 来自于对Object中equals方法的重写
对比字符串的内容是否一致
例子:str1.equals(str3)
b. equalsIgnoreCase() 忽略大小写对比字符串的内容是否一致
例子:str1.equalsIgnoreCase(str3)
c. compareTo() String类实现了Comparable接口
比较两个字符串的大小 正数(this大) 0(相等) 负数(参数大)
d. compareToIgnoreCase() 忽略大小写比较两个字符串的大小
2. String空串
a. length() 获得字符串的字符长度
数组中的length和String中length有什么区别
数组中的length是属性
String中的length是方法
b. isEmpty() 判断字符串是否是空串
3. String方法系列1
(1)boolean isEmpty():字符串是否为空
(2)int length():返回字符串的长度
(3)String concat(xx):拼接,等价于+
结果都在堆内存
(4)boolean equals(Object obj):比较字符串是否相等,区分大小写
(5)boolean equalsIgnoreCase(Object obj):比较字符串是否相等,区分大小写
(6)int compareTo(String other):比较字符串大小,区分大小写,按照Unicode编码值比较大小
(7)int compareToIgnoreCase(String other):比较字符串大小,不区分大小写
(8)String toLowerCase():将字符串中大写字母转为小写
(9)String toUpperCase():将字符串中小写字母转为大写
(10)String trim():去掉字符串前后空白符
注册: salmon
4. 系列2 查找
contains() 判断字符串中是否包含另一个字符串
indexOf(String str) 查找str在指定字符串第一次出现的索引位置,找不到返回-1
lastIndexOf(String str)查找str在指定字符串最后一次出现的索引位置,找不到返回-1
5. 系列3 字符串截取
substring(int startIndex) 从指定下标截取到字符串末尾 (包含指定下标位置的字符)
substring(int startIndex,int endIndex) 种开始索引值截取至结束索引值 (左闭右开)
小练习题:手动输入一个名字,形式为ZHang_SAn_fEng,最终转换成 zhangSanFeng
@Test
public void Test5(){
String str="ZHang8754_SAn_fEng";
String str1="[^a-zA-Z]";
str=str.replaceAll(str1, "").toLowerCase();//注意replace()方法不支持正则
System.out.println(str);
}
正则表达式:
字符类
[abc]
:a
、b
或c
(简单类)
[^abc]
:任何字符,除了a
、b
或c
(否定)
[a-zA-Z]
:a
到z
或A
到Z
,两头的字母包括在内(范围)
预定义字符类
.
:任何字符(与行结束符可能匹配也可能不匹配)
\d
:数字:[0-9]
\D
:非数字:[^0-9]
\s
:空白字符:[ \t\n\x0B\f\r]
\S
:非空白字符:[^\s]
\w
:单词字符:[a-zA-Z_0-9]
\W
:非单词字符:[^\w]
边界匹配器
^
:行的开头
$
:行的结尾
Greedy 数量词
X
?
:X,一次或一次也没有X
*
:X,零次或多次X
+
:X,一次或多次X
{
n}
:X,恰好 n 次X
{
n,}
:X,至少 n 次X
{
n,
m}
:X,至少 n 次,但是不超过 m 次
Logical 运算符
XY:X 后跟 Y
X
|
Y:X 或 Y
(
X)
:X,作为捕获组
常用的正则表达式:
1.验证用户名和密码,第一个字必须为字母,一共6~16位字母数字下划线组成:("^[a-zA-Z]\w{5,15}$")
2.验证电话号码:("^(\d{3,4}-)\d{7,8}$")正确格式:xxx/xxxx-xxxxxxx/xxxxxxxx
3.验证手机号码:("^13|4|5|6|7|8{9}$")
4.验证身份证号(15位):("\d{14}[[0-9],0-9xX]"),(18位):("\d{17}(\d|X|x)")
5.验证Email地址:("^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$")
6.只能输入由数字和26个英文字母组成的字符串:("^[A-Za-z0-9]+$")
7.整数或者小数:("^[0-9]+(.+){0,1}$")
来源:https://blog.csdn.net/qq_40244391/article/details/100125131