StringBuffer
1. 概述
-
线程安全的可变字符序列,字符串缓冲区。
-
构造方法
① StringBuffer() 初始容量为16的字符串缓冲区
② StringBuffer(String str) 初始容量为16+str长度的字符串缓冲区
③ StringBuffer(int capacity) 可以指定容量的字符串缓冲区。
-
常用方法:
① length() 表示字符串缓冲区的字符数。
② capacity() 表示容量。
③ append(obj) 添加(*)
注意:如果超过了容量会自动扩容。
④ delete(int start,int end)/delateCharAt(int index) 移除不包括end的字符/移除指定的字符
⑤ insert(int offset,Object I) 插入
⑥ replace(int start,int end,String str) 替换
⑦ reverse() (*) 反转。
注意:一般用来判断是否对称字符串,
⑧ setCharAt(int index,char ch) 设置指定索引的值。
⑨ toString() 转换为字符串
-
crud 增删改查
代码:
public class StringBuffer类 {
public static void main(String[] args) {
/*StringBuffer sb=new StringBuffer();
System.out.println(sb.length());
System.out.println(sb.capacity());
sb.append(1).append(234567).append(890123451).append(1);
System.out.println("=========");
System.out.println(sb.length());
System.out.println(sb.capacity());*/
StringBuffer sb1=new StringBuffer("123");
System.out.println(sb1.capacity());
/*StringBuffer sb2=sb1.append(123).append(true);
System.out.println(sb1==sb2);*/
StringBuffer sb2=new StringBuffer("12345678");
//System.out.println(sb2.delete(2, 5));
// System.out.println(sb2.deleteCharAt(2));
// System.out.println(sb2.insert(2, "我"));
// System.out.println(sb2.replace(2, 3, "我"));
// System.out.println(sb2.reverse());
sb2.setCharAt(2, '我');
System.out.println(sb2);
}
}
2. StringBuffer与String 的区别(***)
- StringBuffer在操作字符串的增删改操作时速度比String快。
- StringBuffer没有重写equals方法,String重写了 在比较字符串时只要字符序列相同即可。
3. StringBuffer与StringBuilder的区别:
- 两者的用法相同,区别在于StringBuffer是线程安全的,速度慢。
- StringBuilder线程不安全,速度快。
时间类
1. 时间类相关方法与介绍
-
时间:Date:位于java.util包下。
-
构造方法:
① Date() 表示当前时间。
② Date(long date) 表示创建 long类型毫秒值的时间。1970—开始 通过毫秒值获取时间
-
常用方法:
① getTime() 返回1970年到对象的时间的毫秒值。
-
simpleDateFormat 时间日期格式化类。
① 格式化:将时间转换成字符串。
format(Date date)
② 解析:将字符串转换成时间。
parse(String source)
③ 创建对象的模板:
y 年
M 月
d 天
E 星期的天数
H 0-23小时
m 分钟
s 秒
public class 时间类{ public static void main(String[] args) throws ParseException{ Date date=new Date(); System.out.println(date); System.out.println(date.getTime()); Date date1=new Date(1000); System.out.println(date1.getTime()); //创建SimpleDateFormat对象 SimpleDateFormat sdf=new SimpleDateForat("yyyy/MM/dd E HH:mm:ss"); //转换成字符串 String value=sdf.fomat(date); System.out.println(value); String s="2020/08/28 星期二 11:38:31"; //转换成时间 Date dt=sdf.parse(s); System.out.println(dt); } }
基本数据类型的包装类
-
包装类:实质是基本数据类型功能的增强。
-
基本数据类型包装类(***)
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
1. Integer类
-
构造方法:
① Integer(int value) 将int包装成Integer
② Integer(String value) 将字符串转换成Integer类型。
-
常用属性:
① MAX_VALUE 最大值
② MIN_VALUE 最小值
-
装箱与拆箱(****)
装箱:将基本数据类型转换成包装类
拆箱:将包装类转换成基本数据类型
在jdk1.5之前需要通过xxxvalue()的方法进行,1.5之后引入了自动装箱和自动拆箱
自动装箱:可以直接使用基本基本类型的数据给引用类型的变量赋值。
自动拆箱:可以直接使用包装类对象,给基本基本类型的变量赋值。(包装类直接进行计算)
-
常用方法:
① parseInt(String s) 将字符串转换成int类型
② toBinaryString(int i)/toHexString(int i)/toOctalString(int i) 二/十六/八进制
③ valueOf(int i)/valueOf(String i) 类型转换的方法。(***)
代码:
public class Integer类{ public static void main(String[] args){ int s=5; Integer it=new Integer(a); System.out.println(it); System.out.println(Integer.MAX_VALUE); System.out.println(Integer.MIN_VALUE); String m="5"; System.out.println(new Integer(m)); //字符串类型转Integer Integer n=new Integer(m); int k=new Integer(m); int k=f.intValue(); //注意转换字符串时可能发生 NumberFormatException异常 数字格式化异常 int value=Integer.parseInt("123"); System.out.println(value); System.out.println(Integer.toBinaryString(2)); System.out.println(Integer.toHexString(16)); System.out.println(Integer.toOctalString(8)); //valueOf(int i)/valueOf(String i) 类型转换的方法 Integer value2=Integer.valueOf("123"); } }
2. Character类
-
常用方法:
isDigit(char ch) 判断是否为数字
isLetter(char ch) 判断是否为字母
注意:中文也算字母。
代码:
public class Character类{ public static void main(String[] args){ System.out.println(Character.isDigit('a')); System.out.println(Character.isLetter('我')); } }
正则表达式
-
正则表达式,又称规则表达式,通常用来检索、替换那些符合某个模式的文本。
-
正则表达式的实质:
也是一个字符串,表示某种规则的字符串。用来校验或者查找、替换某些符合要求的文本的字符串。
-
Pattern类:
1. Pattern类
-
常用方法:
① String类
matches(String regex) 判断字符串对象是否符合参数正则表达式的规则。
-
正则表达式的写法:
字符类+数量词
数量词:(***)
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好n次
X{n,} X,至少n次
X{n,m} X,至少n次,但是不超过m次
预定义字符类
. 任何字符
\d 数字:[0-9]
\D 非数字:[^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
代码
public class 正则表达式{ public static void main(String[] args){ //qq 号码:①数字②长度 5-11位 String qq="11345_"; String regex="[0-9]{5,11}"; boolean flag = qq.matches(regex); System.out.println(flag); //要求长度在[2,5]的范围内,只能由字母、数字、下划线组成。 String name="1_123"; String regexName="[0-9a-zA-Z_]{2,5}"; System.out.println(name.matches(regexName)); //邮箱规则:字母数字_@字母数字.com Stringemail="123@qq.com"; //正则表达式,特殊字符,需要通过转义来实现,比如 .表示任意字符, //如果需要表示点的原来的意思,需要加转义\表示。 StringregexEmail="[0-9a-zA-Z_]+@[0-9a-zA-Z]+\\.com"; System.out.println(email.matches(regexEmail)); } }
2. 补充
-
边界匹配器:
① ^ 行的开始
② $ 行的结束
③ \b 表示单词边界
-
split(String regex) 可以支持正则
-
replaceAll(String regex,String replacement) 可以支持正则替换
分组 ()
获取分组 $组号
代码:
public class 正则表达式补充{ public static void main(String[] args){ String s="a1sdfsdf1342sdfsdf080dfsf"; String regex="\\d+"; String[] arr=s.split(regex); for(int i=0;i<arr.length;i++){ System.out.println(arr[i]); } //String tel="(133)1234(9785)";//==>133****9785 String tel="13312349785"; String regTel="(1[35-8]{2})[0-9]{4}([0-9]{4})"; System.out.println(tel.replaceAll(regTel,"$1****$2")); String name="张三"; int value=name.length(); System.out.println(name.replaceAll("(.).*","S1*")); } }