《Java 编程思想》第13章 字符串 笔记
2017-02-14 11:53
295 查看
第13章 字符串
一,不可变的String在Java中, String类是不可变的。那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的。不能改变状态的意思是:不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变。、
(一)
String a="howdy"; System.out.println(a); a="HOWDY"; System.out.println(a);
输出结果:
howdy
HOWDY
首先创建一个String对象引用a,然后让a的值为“howdy”, 然后又让a的值为“HOWDY”。 从打印结果可以看出,a的值确实改变了。 其实这不然: a只是一个String对象的引用,并不是对象本身。对象在内存中是一块内存区,成员变量越多,这块内存区占的空间越大。引用只是一个4字节的数据,里面存放了它所指向的对象的地址,通过这个地址可以访问对象。也就是说,a只是一个引用,它指向了一个具体的对象,当a=“HOWDY”; 这句代码执行过之后,又创建了一个新的对象“HOWDY”, 而引用a重新指向了这个新的对象,原来的对象“howdy”还在内存中存在,并没有改变。
(二)
public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[]; /** Cache the hash code for the string */ private int hash; // Default to 0
这是String内部的成员变量,当创建String对象时。value数组保存了String对象中的所有字符。value数组是final数据,这就表明运行时被初始化后将永不改变它的值。并且String类中不包含setValue()去改变value的值。这可能是String不被改变的原因吧!
(三)
String a="howdy"; System.out.println(a); String b=a.toUpperCase(); System.out.println(b); System.out.println(a);
输出结果:
howdy
HOWDY
howdy
可以查看JDK文档。String类中每一个看起来会修改String值的方法,实际上都是创建一个新的String对象,以包含修改后的字符串内容,而初始的对象却未改变。
二,正则表达式
正则表达式——古老而又强大的文本处理工具。仅用一段简短的表达式语句,就能快速地实现一个复杂的业务逻辑。掌握正则表达式,让你的开发效率有一个质的飞跃。
20个用于校验的正则表达式,可以很好的简化代码
1、校验密码强度
密码的强度必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间
^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
2、校验中文,字符串只能是中文
^[\\u4e00-\\u9fa5]{0,}$
3、由数字,26个英文字母或下划线组成的字符串
^\\w+$
4、校验E-Mail 地址
[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?
5、校验身份证号码
15位:
^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$
18位:
^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$
6、校验日期,“yyyy-mm-dd“ 格式的日期校验,已考虑平闰年
^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$
7、校验金额,金额校验,精确到2位小数
^[0-9]+(.[0-9]{2})?$
8、校验手机号
下面是国内 13、15、18开头的手机号正则表达式
^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$
9、判断IE的版本
^.*MSIE [5-8](?:\\.[0-9]+)?(?!.*Trident\\/[5-9]\\.0).*$
10、校验IP-v4地址
\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b
11、校验IP-v6地址
(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))
12、检查URL的前缀
if (!s.match(/^[a-zA-Z]+:\\/\\//)){ s = 'http://' + s;}
13、提取URL链接
^(f|ht){1}(tp|tps):\\/\\/([\\w-]+\\.)+[\\w-]+(\\/[\\w- ./?%&=]*)?
14、文件路径及扩展名校验
^([a-zA-Z]\\:|\\\\)\\\\([^\\\\]+\\\\)*[^\\/:*?"<>|]+\\.txt(l)?$
15、提取Color Hex Codes
^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$
16、提取网页图片
\\< *[img][^\\\\>]*[src] *= *[\\"\\']{0,1}([^\\"\\'\\ >]*)
17、提取页面超链接
(<a\\s*(?!.*\\brel=)[^>]*)(href="https?:\\/\\/)((?!(?:(?:www\\.)?'.implode('|(?:www\\.)?', $follow_list).'))[^"]+)"((?!.*\\brel=)[^>]*)(?:[^>]*)>
18、查找CSS属性
^\\s*[a-zA-Z\\-]+\\s*[:]{1}\\s[a-zA-Z0-9\\s.#]+[;]{1}
19、抽取注释
<!--(.*?)-->
20、匹配HTML标签
<\\/?\\w+((\\s+\\w+(\\s*=\\s*(?:".*?"|'.*?'|[\\^'">\\s]+))?)+\\s*|\\s*)\\/?>
相关文章推荐
- Java编程思想笔记——第十三章 字符串
- java编程思想笔记--字符串部分二
- java编程思想笔记--字符串部分一
- 读书笔记 JAVA编程思想 第13章 字符串
- java编程思想阅读笔记(六)异常处理
- Java 编程思想(第四版)学习笔记(5)初始化与清理
- java编程思想学习笔记(二)
- JAVA编程思想学习笔记
- (28)21.3.2 解决共享资源竞争---Java编程思想之并发笔记
- Java编程思想 第四版 第一章 对象导论 笔记 思维导图
- Java 编程思想(第四版)学习笔记(4 )控制执行流程
- JAVA编程思想学习笔记(二)
- java 编程思想笔记之多态
- Java 编程思想(第四版)学习笔记(7)复用类
- (29)21.3.3 原子性与易变性---Java编程思想之并发笔记
- Java 编程思想(第四版)学习笔记(3)操作符
- Java编程思想笔记_以构造函数确保初始化的进行
- java 编程思想笔记之static 和 final 关键字
- JAVA编程思想学习笔记(一)
- java编程思想阅读笔记(一)