复习:
1. Object:顶级父类。任何一个类都将Object作为父类使用,也因此所有的对象都可以赋值给Object对象
--- Lambda表达式不能直接赋值给Object
--- getClass:获取对象的实际类型;
equals:比较两个对象是否相等。 比较的时候默认是比较的两个对象的地址,但是实际中往往要重写(地址、参数、类型、属性);
toString:当打印对象的时候最底层往往是调用对象的toString
String
最终类。代表字符串的类。
底层是依靠字符数组来存储数据并且该字符数组定义好之后不可变 --- 只要是值一致的字符串在方法区中用的一定是同一个
当进行字符串的拼接的时候如果个数比较少可以使用+;如果个数比较多建议使用StringBuilder
注意:在String中提供了一系列操作而不改变原字符串的方法,大部分都是产生了一个新的字符串
instanceof --- 判断对象和类的关系的,只要前边的对象是后边的类/子类/接口/子接口产生的实例,就返回一个true
“abc” instanceof String --- true
new Person() instanceof Object --- true
“abc” instanceof Serializable --- true
练习:输入一个字符串和一个数字,数字表示字节个数,根据指定的字节个数切割字符串(GBK)
接口interface 4->接口 7->接口int 3->接
练习:输入2个字符串,打印第二个字符串在第一个字符串中出现的所有的位置
vagaophgao a -> 1 3 8
regular expression - 正则表达式 - REGEX
Pattern --- 适用于完成筛选和过滤的操作
public static void main(String[] args) {
String str = "abc";
// 判断字符串是否是abc
// System.out.println(str.equals("abc"));
// 编译正则规则形式
// Pattern p = Pattern.compile("abc");
// 将正则进行匹配
// Matcher m = p.matcher(str);
// 进行判断
// boolean b = m.matches();
// 判断字符串:
// 由3个字母组成
// 第一个字母是a/b/c
// 第二个字母是d/e/f/g
// 第三个字母是x/y/z
Pattern p = Pattern.compile("[bac][gedf][xyz]");
Matcher m = p.matcher(str);
boolean b = m.matches();
System.out.println(b);
}
public static void main(String[] args) {
String str = "a";
// 判断字符串:
// 由3个字母组成
// 第一个字母是a/b/c
// 第二个字母是d/e/f/g
// 第三个字母是x/y/z
// System.out.println(str.matches("[abc][defg][xyz]"));
// 匹配由一个字母组成的字符串
// System.out.println(str.matches("[a-zA-Z]"));
// 匹配由一个数字组成的字符串
// System.out.println(str.matches("[0-9]"));
// System.out.println(str.matches("\\d"));
// 匹配由一个字符组成的字符串,但不是a/b/c
// [^...] 表示除了这些字符
System.out.println(str.matches("[^abc]"));
}
public static void main(String[] args) {
String str = "gbbsdardfdjvt";
// 匹配由5个小写字母组成的字符串
// {n} 表示之前的字符恰好出现n次 == n
// System.out.println(str.matches("[a-z]{5}"));
// 匹配至少由5个小写字母组成的字符串
// System.out.println(str.matches("[a-z]{5,}"));
// 匹配由8-12个小写字母组成的字符串
System.out.println(str.matches("[a-z]{8,12}"));
}
public static void main(String[] args) {
String str = ".";
// 匹配由a开头的由2个字符组成的字符串
// . 表示通配符,可以匹配任意一个类型的字符
// System.out.println(str.matches("a."));
// 判断是否是一个 .
// \\. Java先转义为\. ,正则再转义为.
// System.out.println(str.matches("\\."));
// 怎么匹配 \
// \\\\ Java先转义为\\ ,正则再转义为\
System.out.println(str.matches("\\\\"));
}
public static void main(String[] args) {
String str = "a";
// 数量词
// 匹配由a开头至少由2个字符组成的字符串
// System.out.println(str.startsWith("a") && str.length() >= 2);
// + 表示之前的字符至少出现1次 >= 1
// System.out.println(str.matches("a.+"));
// 匹配由小写字母开头由数字结尾的字符串
// * 表示之前的字符可有可无 >= 0
// System.out.println(str.matches("[a-z].*\\d"));
// 匹配由a开头至多2个字符组成的字符串
// ? 表示之前的字符至多出现1次 <= 1
System.out.println(str.matches("a.?"));
}
public static void main(String[] args) {
// String str = "fabtab";
// 判断含有至少2个ab的字符串
// () 捕获组
// 正则表达式会对其中的捕获组进行自动的编号
// 编号是从1开始的
// System.out.println(str.matches(".*(ab).*(ab).*"));
// \\n 表示引用前边编号为n的捕获组
// System.out.println(str.matches(".*(ab).*\\1.*"));
// 捕获组的编号是从捕获组的左半边括号出现的位置开始计算的
// (A((BC)(D))E)(F)
// \\1 A((BC)(D))E
// \\2 (BC)(D)
// \\3 BC
// \\4 D
// \\5 F
// 判断一个字符串是否是一个叠字字符串
// 哈哈哈 啊啊啊啊
// String str = "笑哈哈";
// System.out.println(str.matches("哈{2,}"));
// System.out.println(str.matches("(.)\\1+"));
// 表示匹配由至少2个字符组成的字符串
// System.out.println(str.matches("(.){2,}"));
// 匹配AABB形式的词语
// 欢欢喜喜
// String str = "上上下下";
// System.out.println(str.matches("(.)\\1(.)\\2"));
// 匹配ABAB形式的词语
// 休息休息 溜达溜达
String str = "休息休息";
System.out.println(str.matches("(..)\\1"));
}
练习:
1. 输入一个字符串,然后判断字符串是否是一个小数字符串
10.28 0.56 3.00 13.85 15. 00.65
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String str = s.next();
System.out.println(str.matches("0\\.\\d+")
|| str.matches("[1-9]\\d*\\.\\d+"));
}
2. 校验密码:8-20位,小写字母/大写字母/数字中的至少两种
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String pwd = sc.nextLine();
System.out.println(check(pwd));
}
private static boolean check(String pwd) {
if (!pwd.matches("[a-zA-z0-9]{8,20}"))
return false;
// 记录出现的字符的种类
int count = 0;
// 判断是否含有小写字母
if (pwd.matches(".*[a-z].*"))
count++;
// 判断是否含有大写字母
if (pwd.matches(".*[A-Z].*"))
count++;
// 判断是否含有数字
if (pwd.matches(".*\\d.*"))
count++;
return count >= 2;
}