java基础04String
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 有速度优势
比较
| String | StringBuffer | StringBuilder |
|---|---|---|
| String值是不可变的,每次对String的操作都会生成新的String对象,效率低下,浪费内存空间 | StringBuffer是可变类,和线程安全的字符串操作类,任何操作都不会产生新的对象。StringBuffer对象有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量 | 可变类,速度更快 |
| 不可变 | 可变 | 可变 |
| 线程安全 | 线程不安全 | |
| 多线程操作字符串 |
如果自己都不相信自己了,那该如何呢?

浙公网安备 33010602011771号