常用类
String
String引用类型和字符串常量
String s =“abc”;
"abc"被双引号包裹的内容,是字符串常量(字面值),存放于字符串常量池,不可修改值,是共享的;
String s 的s是字符串类对象,是引用变量,存放于堆,可以指向其他地址;
String类常用方法
以下没有任一方法可以改变String对象的值,因为指向的地址不变的,调用方法只是返回一个方法调用后的结果,并没有将返回结果重新赋值给对象本身
-
charAt()
-
length()
-
indexOf(“aaa”)
返回参数字符串第一次出现的下标(4种重载;找不到返回-1;int基本都是指起始下标(查找范围含下标)、ASCII码值) -
lastIndexOf(“aaa”)
返回从后向前查找参数字符串第一次出现的下标(4种重载;找不到返回-1;int基本都是指起始下标(查找范围含下标,注意!从起始下标往前找)、ASCII码值) -
equals(“aaa”)
比较对象与参数的字面值 -
equalsIgnoreCase(“aaa”)
忽略大小写,比较对象与参数的字面值 -
startWith(“aaa”)
判断对象的开始字符的字面值是否与参数相等 -
endWith(“aaa”)
判断对象的结束字符的字面值是否与参数相等 -
getBytes()
返回对象中每个字符的ASCII值组成的字节数组 -
toCharArray()
返回对象中每个字符组成的char数组 -
toUpperCase()
返回对象的全大写形式 -
toLowerCase()
返回对象的全小写形式 -
subString(int a)
从指定下标a位置截取到最后一个(含a含结尾) -
subString(int a,int b)
从指定下标a位置截取到b位置(含a不含b) -
Empty()
返回对象内容是否为空String s =""; ""是空字符串,返回true; String s =" "; " "是含空格的字符串,返回False; String s =Null; Null是不为其分配存储空间,运行时报空指针异常NullPointerException(NULL调用任何方法都会报这个异常)
-
compareTo(“aaa”)
对象与参数位数相同时,从第一位开始比较,第一位不同则返回 对象的第一位的ASCII码值-参数的第一位的ASCII码值 ;第一位相同则判断第二位,返回 对象的第二位的ASCII码值-参数的第二位的ASCII码值 …直到每一位都比完,都一样则返回0;
对象与参数位数不同时,返回对象与参数的长度之差 -
contains(“aaa”)
返回是否包含参数字符串 -
replace(“aaa”,“bbb”)
返回将字符串中的aaa替换为bbb后的新字符串 -
trim()
去除字符串首尾的所有空白(包含空格和tab制表符)(不能去除字符串内部的)
StringBuffer
一个 线程安全 的可变字符序列,一个类似与String的字符串缓冲区,可以调用方法改变序列的长度和内容。
创建
必须使用构造函数创建,不能直接赋值
StringBuffer ss=new StringBuffer();//创建一个空字符串
StringBuffer ss=new StringBuffer("arwq");//arwq字符串
StringBuffer ss=new StringBuffer(10);//创建一个长度为10的空字符串(长度仍为0,length方法判断的是字符个数)
方法调用
String类型的方法(上文全部)
效果也与String类型相同,即不改变对象本身
StringBuffer特有方法
会改变对象原始值
-
insert(int起始下标,String 要插入的字符串)
在指定下标的位置放置/插入参数字符串 -
append(String 要拼接的字符串)
在对象末尾后拼接参数字符串,返回一个StringBuffer
返回的也是StringBuffer所以可以继续调用方法 即 new StringBuffer(“12”).append(“QE”).append(false) 返回 12QEfalse -
delete(int a要删除的起始下标,int b要删除的末尾下标)
删除从a到b位置的字符,不包括b -
deleteCharAt(int 要删除的下标)
-
SetCharAt(int 要设置的下标,char 要更换的字符)
-
reverse() 倒序
StringBuilder
与StringBuffer有相同的API,用法完全一样,只有在考虑线程安全和效率的情况下不同:
安全性 | 运行速度 | 应用场景 | |
---|---|---|---|
StringBuffer | √ | 差 | 多线程,必须注重线程同步 |
StringBuilder | × | 优 | 单线程,不存在线程安全问题 |
—参考:网络编程中的协议— | |||
UDP | × | 优 | 在线视频,不怕丢掉一些帧 |
TCP | √ | 差 | 下载,但凡丢掉一些内容都可能无法使用下载的内容 |
正则表达式
使用场景
针对字符串匹配、切割、替换、查找
匹配:登录场景使用
-
经典方式
创建pattern对象,绑定指定正则 pattern p =Pattern.compile("a*b"); 调用pattern对象的匹配方法,创建匹配器对象 Matcher m = p.matcher(); 调用匹配器对象的匹配方法,返回布尔值(是否匹配) boolean b = m.macthes();
-
简便方式
"数据源".matches(“正则”) 返回一个Boolean值
匹配符号 | 含义 |
---|---|
直接放字符 | 放的字符必须出现且在对应位置 |
. | .号代表任意字符,前面加\或者用[]包裹则表示为"."字符 |
* | *号前面的字符出现0次或多次 |
? | ?号前面的字符出现1次或0次 |
+ | +号前面的字符出现1次或多次 |
\\b | \\b号表示单词边界,可以识别!,空格。句子首尾等单词边界 |
[0-9] | 在中括号内的范围(0到9)挑一个 |
[0-9a-zA-z] | 在中括号内的范围(0到9或a到z或A到Z)挑一个 |
{10} | {}前的部分出现次数必须为10 |
{5,} | {}前的部分最少出现次数为5,最多出现次数不限 |
{5,10} | {}前的部分最少出现次数为5,最多出现次数为10 |
示例 | 邮箱规则:不能0开头,6-12位,纯数字 [1-9a-zA-z][0-9a-zA-z]{3,7}@[0-9a-zA-z]{2,7}\.com [首位不为0的数字或字母][3-7位任意的数字或字母]@[2-7位任意的数字或字母].(转义避免表示通配)com |
切割:用于提取数据(切割网址、文章等)
"数据源".split(“正则”)
返回一个字符串数组
public static void main(String[] args) {
String s1="wqji++x217@+++nm,,.c+im";
System.out.println(Arrays.toString(s1.split("\\++")));//[wqji, x217@, nm,,.c, im]
}
替换:
public static void main(String[] args) {
String s1="wqji++x217@+++nm,,.c+im";
System.out.println(s1.replaceAll("\\++", "*"));//wqji*x217@*nm,,.c*im
}
查找:
String s1="ohh,today is thursday,i see you,can we play?";
Pattern p1=Pattern.compile("\\b[a-z]{3}\\b");
Matcher m1=p1.matcher(s1);
while (m1.find()) {
System.out.println(m1.group());//ohh see you can
}