java基础04String

String

1.内存

1.String是 immutable的,也就是不可变,一旦初始化,其引用指向的内容是不可变

2.更改字符串时,创建新的字符串对象并做修改,原始字符串保持不变

3.底层是final char[]

4.new出的对象在堆内存中重新分配空间

5.直接赋值时字符串取自常量区(先拼接为整体再进行比对)

2.构造

String()将创建一个空字符串
String(String original) 将新建一个字符串作为指定字符串的副本
String(char[] value) 将根据字符数组构造一个新字符串
String(byte[] bytes) 将通过转换指定的字节数组新建一个字符串
String(byte[] bytes, Char_set char_set) 使用指定编码格式对字节数组进行解码
String(byte[] bytes, int offset, int length) 将通过转换指定的字节数组新建一个字符串

3.常用方法

//比较判断
boolean equalsIgnoreCase(String str);//忽略大小写比较
int compareTo(String str);//ASCII比较大小
boolean startsWith(String s);//是否以s为前缀
boolean endsWith(String s);//是否以s为后缀
//字符串搜索
int indexOf(int ch);//字符/子串首次索引
int lastIndexOf();//字符/子串最后一次索引
//处理字符串
char charAt(int index);//提取字符
String subString(int begin,int end);//子串,可省略end
String concat(String str);//连接字符串,新建对象
String replace(char old,char n);//将old替换成n
String replaceAll(String re,String repl);//替换子串
String trim();//去掉前后空格的副本
String[] split(String re);//以re分割成数组(正则)
String toUpperCase();//全大写
String toLowerCase();//全小写
byte[] getBytes();//返回byte数组形式
char[] toCharArray();//返回字符数组形式

4.正则表达式

常用

"^([]{})([]{})([]{})$"

^匹配输入字符串的开始位置。
$ 匹配输入字符串的结束位置。
* 匹配前面的子表达式零次或多次。
+ 匹配前面的子表达式一次或多次。
? 匹配前面的子表达式零次或一次。
{n} n是一个非负整数。匹配确定的n次。
{n,} n是一个非负整数。至少匹配n次。
{n,m} m和n均为非负整数,其中n<=m。
. 匹配除“\``n”之外的任何单个字符。
x|y匹配x或y。
[xyz] 字符集合。
[^xyz] 负值字符集合。
[a-z] 字符范围。
[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。
\b 匹配一个单词边界,也就是指单词和空格间的位置。
\B 匹配非单词边界。
\cx 匹配由x指明的控制字符。
\d 匹配一个数字字符。
\D 匹配一个非数字字符。
\f 匹配一个换页符。
\n 匹配一个换行符。
\r 匹配一个回车符。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。
\S 匹配任何非空白字符。
用户名/^[a-z0-9_-]{3,16}$/
密码 /^[a-z0-9_-]{6,18}$/
十六进制值 /^#?([a-f0-9]{6}|[a-f0-9]{3})$/
电子邮箱 /^([a-z0-9_.-]+)@([\da-z.-]+).([a-z.]{2,6})$/ /^[a-z\d]+(.[a-z\d]+)*@(\da-z?)+(.{1,2}[a-z]+)+$/
URL /^(https?:\/\/)?([\da-z.-]+).([a-z.]{2,6})([\/\w .-])\/?$/
IP 地址 /((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/ /^(?:(?:25[0-5]|20-4|[01]?0-9?).){3}(?:25[0-5]|20-4|[01]?0-9?)$/
HTML 标签 /^<([a-z]+)(<+)(?:>(.)<\/\1>|\s+\/>)$/
删除代码\注释 (?<!http:|\S)//.*$
Unicode编码中的汉字范围 /^[\u2E80-\u9FFF]+$/

StringBuffer

可以修改的字符串

1.构造

StringBuffer()空对象,默认16个字符缓冲空间
StringBuffer(String str) str内容,默认16个字符缓冲空间
StringBuffer(int capacity) 空对象,自定缓冲空间

2.方法

StringBuffer insert(int index,T x)插入index处
int length() 返回长度
void setCharAt(int index,char ch) 替换指定位字符
String toString() 转换为字符串
StringBuffer reverse() 将内容倒置
StringBuffer delete(int start,int end) 删除指定内容
StringBuffer delete(int index) 删除指定字符
StringBuffer replace(int start,int end,String str) 替换子串
StringBuffer append(T s) 添加

 

StringBuilder

可变字符缓冲

非线程安全 相较于 StringBuffer 有速度优势

 

比较

StringStringBufferStringBuilder
String值是不可变的,每次对String的操作都会生成新的String对象,效率低下,浪费内存空间 StringBuffer是可变类,和线程安全的字符串操作类,任何操作都不会产生新的对象。StringBuffer对象有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量 可变类,速度更快
不可变 可变 可变
  线程安全 线程不安全
  多线程操作字符串 单线程操作字符串
posted @ 2021-04-07 11:58  FremontUltimate  阅读(73)  评论(0)    收藏  举报