2018年8月16日笔记(String、正则表达式)

复习:

        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;
}

猜你喜欢

转载自blog.csdn.net/DGHxj_/article/details/81746659