黑马程序员 -- Java基础学习(10)
来源:互联网 发布:学高等数学的软件 编辑:程序博客网 时间:2024/06/05 13:32
------- android培训、java培训、期待与您交流! ----------
正则表达式
• 符合一定规则的表达式 作用:操作字符串 特点:用于一些特定的符号来表示一些代码操作,简化书写 好处:可以简化对字符串的复杂操作。 弊端:符号定义越多,正则越长,阅读性越差。• 例子:对QQ号码进行校验,要求:5~15 0不能开头,只能是数字 用String类的方法实现,代码比较复杂 用matches(regex) String regex = “[1-9][0-9]{4,14}”;
▸ 具体操作功能:
▸ 匹配String:boolean matches(String regEx) 用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false• [abc] 匹配一个字符,是abc其中一个 [a-z] 小写字母 [^abc] 非abc [a-zA-Z] 英文字母 . 任意字符 \\d 0-9数字 - 记得前面加上\转义 \\D 非数字 \\s 空白字符 \\w 单词字符 \\b 单词边界 * 0个或多个 + 1个或多个 ? 0个或1个 {,} 次数范围• QQ号:[1-9]\\d{4, 14}• 手机号:13xxxx, 15xxx, 18xxx -> 1[358]\\d{9}▸ 切割:String[] split(String regEx) -> splitDemo()• 注意.表示的是任意字符,要表示点号得写成\\. c:\\abc\\a.txt -> \\\\• splitDemo("erkktyqqquizzzzzo","(.)\\1+"); 按照叠词完成切割 为了可以让规则的结果被重用,可以将规则封装成一个组,用()表示,组的出现都有编号,从1开始 想要使用已有的组可以通过\n(n就是组的编号)的形式来获取 数有几组,看组号:看左括号 ((())())▸ 替换:String replaceAll(regEx, str)• "wer1389980000ty1234564uiod234345675f”.replaceAll(“\\d{5,}, “#”);
将字符串中的数组替换成#• 如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组
“erkktyqqquizzzzzo”.replaceAll(“(.)\\1+”, “$1”); 将重叠的字符替换成单个字母▸ 获取:将字符串中符合规则的字串取出• 1. 将正则表达式封装成对象 Pattern -> java.util.regex.* Pattern p = Pattern.compile(reg);• 2. 让正则对象和要操作的字符串相关联,获取匹配器对象 Matcher m = p.matcher(str); m.matches(); 返回true或false 其实String类中的matches方法,用的就是Pattern和Matcher对象来完成的,只不过被String的方法封装后,用起来较为简单,但是功能却单一• 3. 关联后,获取正则匹配引擎• 4. 通过引擎对符合规则的子串进行操作,比如取出 m.find() -> 将规则作用到字符串上,并进行符合规则的子串查找 m.group() -> 获取匹配后的结果 用循环表示: while(m.find()) { System.out.println(m.group()); System.out.println(m.start()+"...."+m.end()); //找到索引位置,包含头不包含尾 } 注意matches和find方法都会改变查找索引位置
▸ 练习
RegTest.java
• 选择功能的思路
1. 如果只想知道该字符是否对是错:匹配。 2. 想要将已有的字符串变成另一个字符串:替换。 3. 想要按照自定的方式将字符串变成多个字符串:切割。获取规则以外的子串。 4. 想要拿到符合需求的字符串子串:获取。获取符合规则的子串。• 将已有字符串变成另一个字符串。使用 替换功能。 1. 可以先将 . 去掉。 2. 在将多个重复的内容变成单个内容。• 192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30 将ip地址进行地址段顺序的排序 思路:还按照字符串自然顺序,只要让它们每一段都是3位即可。 1. 按照每一段需要的最多的0进行补齐,那么每一段就会至少保证有3位。 2. 将每一段只保留3位。这样,所有的ip地址都是每一段3位。 用TreeSet进行排序 • 掌握:对邮件地址进行校验 较为精确的匹配:[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+ 模糊的匹配:\\w+@\\w+(\\.\\w+)+ 比如 1@1.1• 网页爬虫 RegexTest2.java
设计模式
• 解决某一类问题最行之有效的方法 java中有23种
▸ 单例设计模式
一个类在内存中只存在一个对象 SingleDemo.java SingleDemo2.java• 1. 为了避免其他程序建立过多个该类对象,先禁止其他程序建立该类对象 2. 为了让其他程序可以访问到该类对象,在本类中自定义一个对象 3. 为了方便其他程序访问自定义的对象,对外提供一些访问方式• 1. 将构造函数私有化 2. 在类中创建一个本类对象 private static (可以加final) 3.提供一个方法获取该对象 getInstance() static▸ 两种写法(见程序)▸ 饿汉式:开发一般用该写法 Single类一进内存对象就已经初始化 ▸ 懒汉式:对象的延时加载 (面试) • Single类进内存是对象还没有存在,只有调用了getInstance方法时才建立• 可能会建立多个对象:用synchronized,会降低效率 解决方法见SingleDemo2.java if (s== null) { //只要初始化完,就不用判断同步了,可以提高效率 synchronized(Single.class) { if(s==null) { s = new Single(); } } }
▸ 模板设计模式
TemplateDemo.java• currentTimeMillis()• 定义功能时,只有一部分功能是确定的,而确定的部分在使用不确定的部分 此时将不确定的部分暴露出去,由子类来完成• 被复写的方法不一定是抽象的,可以有默认的功能
▸ 装饰设计模式
PersonDemo.java• 当想要对已有的对象进行功能增强时,可以定义一个类将已有对象传入,基于已有对象的功能提供加强的功能 自定义的类称为装饰类• 在构造函数中传入要增强的类对象▸ 装饰和继承的区别 装饰和继承.java• 类的体系:臃肿 MyReader MyTextReader MyBufferedTextReader MyMediaReader MyBufferedMediaReader MyDataReader MyBufferedDataReader• class MyBufferedReader { MyBufferedReader(MyTextReader mtr) {} MyBufferedReader(MyMediaReader mmr) {} … } 该类扩展性差• 找到参数的共同类型,通过多态的形式提高扩展性 class MyBufferedReader extends MyReader { MyBufferedReader(MyReaer mr) {} }• 装饰模式比继承灵活,避免了继承体系的臃肿,而且降低了类与类之间的关系• 装饰类具备的功能与已有类功能相同,只不过更强 所以装饰类和被装饰类都属于同一个体系(同一个父类或者接口)• 自定义装饰类 D1908 MyBufferedReaderDemo.java
0 0
- 黑马程序员 -- Java基础学习(10)
- 黑马程序员 -- Java基础学习(1)
- 黑马程序员 -- Java基础学习(2)
- 黑马程序员 -- Java基础学习(3)
- 黑马程序员 -- Java基础学习(4)
- 黑马程序员 -- Java基础学习(5)
- 黑马程序员 -- Java基础学习(6)
- 黑马程序员 -- Java基础学习(7)
- 黑马程序员 -- Java基础学习(8)
- 黑马程序员 -- Java基础学习(9)
- 黑马程序员 -- Java基础学习(11)
- 黑马程序员-Java基础学习(函数)
- 黑马程序员-Java基础学习(数组)
- 黑马程序员——java基础学习日记(10)
- 黑马程序员-JAVA基础学习
- 黑马程序员--Java基础学习十(Java线程)
- 黑马程序员-java学习笔记-java基础
- 黑马程序员 Java基础 10
- SupremeWord进度43.3%
- AWG标准
- 一堂价值39万元的课,把它看完,你一定会有收获
- 判断任意两台计算机的IP地址是否属于同一子网络
- webservice的调用
- 黑马程序员 -- Java基础学习(10)
- http://www.shangxueba.com/jingyan/1849061.html
- 《谁欠谁的幸福》2011高考满分作文
- Dorothy and the wizard in OZ 66%
- 勇者斗恶龙(BFS)
- Android 完美实现图片圆角和圆形(对实现进行分析)
- 太晚睡觉等于自杀,你晚上一般什么时候睡觉?
- 银行软件开发2年半,辞职后竟然找不到工作。
- java学习心得(一):代码的简单编译和解释的前期过程