字符串将我们的语言存入计算机中存在的方式就是计算机重点的字符串
正则表达式用来验证一个字符拆时候与指定的规则匹配
字符串
不可变字符串
:
对应的类
:String.
特点
:
字符串本身不能发生改变
,
与指向字符串的引用无关
.
直接使用
"",
创建的是不可变字符串
可变字符串
:
对应的类
:StringBuilder/StringBuffffer.
特点
:
字符串本身可以发生变化
,
与指向可变字符串的引用无关
创建可变字符串
StringBuffffer stringBuffffer = new StringBuffffer("hello world");
字符串, 是一个引用数据类型。 但是字符串的引用, 和之前在面向对象部分的引用有一点差
别。
差别:
类的对象, 是直接在堆上开辟的空间。 字符串, 是在
常量池 中开辟的空间。
(常量 池, 是在方法区中的一个子空间)
常用的字符串只是在方法区的常量池中开辟空间,里面存储的都是常量池的地址
赋新值的时候只是在常量池中新开辟的地址放入新的元素,把元素地址给变量
原来的元素依然存在(享元原则)
可变字符串则是在内部维护在堆上开辟空间
字符串方法
String()
无参构造, 实例化一个空的字符串对象。 所谓的空字符
串,其实是
"",
并不是
null
。
String(String str)
通过一个字符串, 实例化另外一个字符串。
String(char[] arr)
通过一个字符数组, 实例化一个字符串。 将字符数组中的
所有的字符拼接到一起。
String(char[] arr, int
offffset, int count)
通过一个字符数组, 实例化一个字符串。 将字符数组中的
指定范围的字符拼接到一起。
String(byte[] arr)
通过一个字节数组, 实例化一个字符串。 将字节数组中的
所有的字节拼接成字符串。
String(byte[] arr, int
offffset, int count)
通过一个字节数组, 实例化一个字符串。 将字节数组中的
指定范围的字节拼接成字符串。
String
concat(String str)
字符串拼接
.
将一个字符串与另一个字符串
进行拼接并返回拼接之后的结果
String
substring(int beginIndex)
字符串截取。 从
beginIndex
开始, 一直
截取到字符串的结尾。
String
substring(int beginIndex, int
endIndex)
字符串截取。 截取字符串中
[beginIndex,
endIndex)
范围内的子字符串。
String
replace(char oldChar, char
newChar)
字符串替换。 用新的字符替换原字符串中
所有的旧的字符。
String
replace(CharSequence old,
CharSequence newC)
字符串替换。 用新的字符序列替换原字符
串中所有的旧的字符序列。
char
charAt(int index)
字符获取。 获取指定位的字符。
char[]
toCharArray()
将字符串转成字符数组。
byte[]
getBytes()
将字符串转成字节数组。
int
indexOf
(
char c)
获取某一个字符在一个字符串中第一次出
现的下标。 如果没有出现, 返回
-1
int
indexOf(char c, int
fromIndex)
获取某一个字符在一个字符串中从
fromIndex
位开始往后第一次出的下标。
int
lastIndexOf(char c)
获取某一个字符在一个字符串中最后一次
出现的下标。
int
lastIndexOf(char c, int
fromIndex)
获取某一个字符在一个字符串中
,
从
fromIndex
位开始往前最后一次出现的下
标。
String
toUppeerCase()
将字符串中的所有的小写字母转成大写字
母。
String
toLowerCase()
将字符串中的所有的大写字母转成小写字
母。
boolean
isEmpty()
判断一个字符串是否是空字符串。
int
length()
获取一个字符串的长度。
boolean
contains(String str)
判断一个字符串中, 是否包含另外一个字
符串。
boolean
startsWith(String prefifix)
判断一个字符串, 是否是以指定的字符串
作为开头。
boolean
endsWith(String shuffiffiffix)
判断一个字符串, 是否是以指定的字符串
作为结尾。
String
trim()
去除一个字符串首尾的空格。
boolean
equals(Object obj)
判断两个字符串的内容是否相同。
boolean
equalsIgnoreCase(String str)
判断两个字符串的内容是否相同, 忽略大
小写。
int
compareTo(String other)
对两个字符串进行大小比较。
int
compareToIgnoreCase(String
other)
对两个字符串进行大小比较, 忽略大小
写。
String
join(CharSequence
delimiter, CharSequence
elements)
将若干个字符串拼接到一起,在拼接的时候,
元素与元素之间以指定的分隔符进行分隔。
String
format(String format,
Object... args)
以指定的格式, 进行字符串的格式化
StringBuffffer
和
StringBuilder
类
字符串都是常量, 所有的操作字符串的方法, 都不能直接修改字符串本身
在
StringBuffffer
或者
StringBuilder
类中, 维护了一个字符数组。 这些类中所有的操作方法,
都是对这个字符数组进行的操作。
StringBuffffer/StringBuilder
append(...)
将一个数据拼接到现有的字符串的
结尾。
StringBuffffer/StringBuilder
insert(int offffset,
...)
将一个数据插入到字符串的指定
位。
StringBuffffer/StringBuilder
delete(int start,
int end)
删除一个字符串中
[start, end)
范围
内的数据。
如果
start
越界了, 会出现下标越界
异常。 如果
end
越界了, 没影响,
会将字符串后面的所有的内容都删
除。
StringBuffffer/StringBuilder
deleteCharAt(int
index)
删除指定下标位的字符。
StringBuffffer/StringBuilder
replace(int start,
int end, String
str)
替换,将字符串中
[start, end)
范围
内的数据替换成指定的字符串。
void
setChatAt(int
index, char c)
将指定下标位的字符, 替换成新的
字符。
StringBuffffer/StringBuilder
reverse()
将一个字符串前后倒置、翻转。
String
toString()
返回一个正在操作的字符串。
StringBuffffer
是线程安全的
StringBuilder
是线程不安全的。
当处于多线程的环境中, 多个线程同时操作这个对象, 此时使用
StringBuffffer
。
当没有处于多线程环境中, 只有一个线程来操作这个对象, 此时使用
StringBuilder
。
但凡是涉及到字符串操作的使用场景, 特别是在循环中对字符串进行的操作。 一定不要使用
字符串的方法, 用
StringBuffffer
或者
StringBuilder
的方法来做。
String
类所有的修改操作, 其实都是在方法内实例化了一 个新的字符串对象, 存储拼接之后的新的字符串的地址, 返回这个新的字符串
如果操作比 较频繁, 就意味着有大量的临时字符串被实例化、被销毁, 效率极低。
正则表达式
逐个字符进行匹配, 判断是否和正则表达式中定义的规则一致
^
匹配一个字符串的开头。 在
Java
的正则匹配中,可以省略不写。
$
匹配一个字符串的结尾。 在
Java
的正则匹配中,可以省略不写。
[]
匹配一位字符。
[abc]:
表示这一位的字符, 可以是
a
、也可以是
b
、也可以是
c
。
[a-z]:
表示这一位的字符, 可以是
[a, z]
范围内的任意的字符。
[a-zABC]:
表示这一位的字符, 可以是
[a,z ]
范围内的任意字符, 或者
A
、或者
B
、或者
C
。
[a-zA-Z]:
表示这一位的字符, 可以是任意的字母, 包括大写字母和小写字母。
[^abc]:
表示这一位的字符, 可以是除了
a
、
b
、
c
之外的任意字符。
[^a-z[hk]]:
表示这一位的字符, 不能是任意的小写字母, 但是
h
、
k
除外。
\
转义字符。 由于正则表达式在
Java
中是需要写在一个字符串中。 而字符串中的
\
也是一个转义字符。 因此
Java
中写正则表达式的时候, 转义字符都是
\\
使得某些特殊字符成为普通字符, 可以进行规则的指定。
使得某些普通字符变得具有特殊含义。
\d
匹配所有的数字, 等同于
[0-9]
。
\D
匹配所有的非数字, 等同于
[^0-9]
。
\w
匹配所有的单词字符, 等同于
[a-zA-Z0-9_]
。
\W
匹配所有的非单词字符, 等同于
[^a-zA-Z0-9_]
。
.
通配符, 可以匹配一个任意的字符。
+
前面的一位或者一组字符, 连续出现了一次或多次。
?
前面的一位或者一组字符, 连续出现了一次或零次。
*
前面的一位或者一组字符, 连续出现了零次、一次或多次。
{}
对前面的一位或者一组字符出现次数的精准匹配。
{m} :
表示前面的一位或者一组字符连续出现了
m
次。
{m,}
: 表示前面的一位或者一组字符连续出现了至少
m
次。
{m,n} :
表示前面的一位或者一组字符连续出现了至少
m
次,最多
n
次。
|
作用于整体或者是一个分组, 表示匹配的内容, 可以是任意的一个部分。
abc|123|opq :
表示整体的部分, 可以是
abc
, 也可以是
123,
也可以是
opq
()
分组。 把某些连续的字符视为一个整体对待。
Pattern
类:
在
Java
中,正则表达式的载体。使用正则表达式进行字符串的校验、切割、替
换,都需要使用到这个类。
static
boolean
matches(String regex,
CharSequence
sequence)
静态的规则校验, 直接校验某一个字符串是否
符合某一个规则。
static
Pattern
compile(String regex)
将一个字符串, 编译为
Pattern
对象, 从而可
以当做是一个正则表达式使用。
String[]
split(CharSequence
sequence)
将一个字符序列, 按照指定的规则进行切割,
得到每一个切割部分。
String[]
split(CharSequence
sequence, int limit)
将一个字符序列, 按照指定的规则进行切割,
切割成指定的段数, 得到每一个切割部分。
Matcher
matcher(CharSequence
sequence)
将一个正则表达式和一个字符串进行校验。
Matcher
类:
在
Java
中, 对一个正则校验的结果描述
boolean
matches()
得到本次整体匹配的结果。 一个字符串是否和一个正则表
达式是整体匹配的。
boolean
fifind()
查找字符串中, 是否有满足指定规则的子部分。
boolean
fifind(int
start)
查找字符串中, 从指定的下标位开始往后, 有没有满足指
定规则的子部分。
String
group()
获取当前匹配到的字符串。
int
start()
获取当前匹配到的部分首字符的下标。
int
end()
获取当前匹配到的部分尾字符的下标
+ 1
。
boolean
lookingAt()
查找字符串中, 是否有满足指定规则的子部分。 每次查询
都从第
0
位开始
find()
从字符串的第
0
位开始查询, 查询是否有满足指定规则的子部分。
当再次调用
fifind()
的时候, 从上次查询到的位置开始, 继续向后查询。