您的位置:首页 > 编程语言 > Java开发

阅读笔记[1] ——《Think In Java》 Chapter 13

2016-10-02 22:00 344 查看

阅读笔记[1] ——《Think In Java》 Chapter 13

javap –c 可以用来进行反编译,其中 –c 标志表示将生成JVM字节码

关于 String 对象重载的“+”“+=”操作符,在内部实际引入了 StringBuilder

优化: 把多次出现的String“+”“+=”运算符更改为StringBuilderappend,切勿出现如下情况:append(a+”:”+c)

无意识的递归:重点在于对对象 (this) 的装换为 String 类型的时候,其实就是调用的该类的 toString 方法。所以又在其 toString 方法中进行类型转换会造成无穷的递归,如果想要这么做可以调用 Object toString ,即使用 super.toString()

Java.util.Formatter 用于处理所有新的格式化功能,可以把其看做是一个翻译器,其构造方法需要一些信息,告诉它最终的结果将在哪里输出

String.format() 可以生成格式化的 String 对象

进制转换的一些内部方法:

Integer.toBinaryString(17); //十进制转换为二进制
Integer.toHexString(17);    //十进制转换为十六进制
Integer.toOctalString(17);  //十进制转换为八进制
Integer.valueOf("11", 2);   //二进制转换为十进制,其中“11”为原数,2表示二进制


正则表达式

Java 中需要先将 \ 转义,\\ 表示要插入一个正则表达式的反斜线,如果想要插入普通的反斜线,则应该为 \\\\

括号有着将表达式分组的效果,而竖直线 | 则表示或运算

Split() replace() 方法可以直接使用正则表达式,前者功能是“将字符串从正则表达式匹配的地方切开”,后者功能是“将匹配的地方替换”

字符集、边界匹配符等(应该将JDK文档中java.util.regex.Pattern那一页加入浏览器的书签中)

量词,描述了一个模式吸收输入文本的方式:[1] 贪婪型 [2] 勉强型 [3]占有型(这里有问题,不太清楚这三种模式的区别)

(Groups),可以根据组的编号来引用某个组。例如:A(B(C))D 其中有三组,组0 ABCD、组1 BC、组2 C 。有关组的几个方法:public int groupCount()public String group()public int end(int group)public int start(int group) 这些都是 Mather 对象的方法

附:find() lookingAt() matches() 三者的区别

i. find() 可以在输入的任何位置定位正则表达式;

ii. lookingAt() 和 matches() 只有在正则表达式和输入的最开始处匹配才会成功,且matches() 需要输入的全部匹配正则表达式的时候才会成功,而lookingAt()只需要第一部分匹配成功就可以;

Pattern 标记,使用 Pattern.compile(String regex,int flag) 可以接受一个标记参数,以调整匹配的行为。

编译标记效果
Pattern.CASE_INSENSITIVE(?i)开启基于Unicode的大小写不敏感的匹配
Pattern.MULTILINE(?m)^和$为匹配一行的开始和结束,默认为完整字符串的开始和结束
Pattern.COMMENTS(?x)空格符被忽略,并且以#开始的该行注释也被忽略
Pattern.DOTALL(?x) .可以匹配所有的字符包括行终结符,默认不包括行终结符
Matcher中的一些使用方法:

Split()String 的,但其可以带第二个参数用来确定分割后字符串的数量,即只分割前几个;

appendReplacement(StringBuffer sbuf,String replacement) 执行渐进式的替换,将一次替换的结果保存在sbuf 中。appendTail(StringBuffer sbuf) 是在上面方法执行一次或多次后,将输入字符串的余下的部分复制到 sbuf 中;

reset() 重新设置到当前字符序列的起始位置,reset(String str) 匹配 str

正则表达式的使用

[1] 利用 static Pattern.compile() 方法来编译正则表达式,其中正则表达式以 String 形式作为该方法的参数,最终产生该正则表达式的一个 Pattern 对象

[2] 把想要检索的字符串传入 Pattern 对象的 matcher() 方法,结果会产生一个 Matcher 对象

[3] 利用产生的 Matcher 对象,可以对利用其 find() 方法获取结果,该对象有许多方法可以使用

[4] [补充] matcher() 方法接受 CharSequence 类型的参数。 CharSequence 是一个接口,它是从 CharBuffer String StringBuilder StringBuffer 类之中抽象出来的字符序列的一般化定义

Scanner 有一个假设,在输入结束时会抛出 IOException ,所以 Scanner 会把IOException 吞掉,不过可以通过调用 IoException() 方法可以查找最近发生的异常

Scanner 定界符可以使用正则表达式,Scanner.useDelimiter(“\\s*,\\s*”)。还可以通过 delimiter() 方法来返回当前正在作为定界符使用的 Pattern 对象

Scanner next(String pattern) 方法配合指定的正则表达式使用时,将找到下一个匹配该模式的输入部分,再调用 match() 方法就可以获得匹配的结果。注意:此处的正则表达式切勿包含定界符(上述)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 阅读