1基础-013:字符串
来源:互联网 发布:深圳网络推广方法 编辑:程序博客网 时间:2024/06/05 12:42
String对象不可变,每次修改都生成一个新对象(每次是拷贝)。
JDK自带的javap工具反编译代码
javap –c javaFileNameWithoutFileExtension
重载符“+”和“+=”:本质上每次生成了java.lang.StringBuilder类。尤其toString()方法循环时使用,一定要自己生成此类(javap来分析)。
String s = "abc" + a + 22
StringBuilder是JAVA SE5引入的,之前是StringBuffer(线性安全开销大).
打印内存:应该调用最基类Object.toString,在该类的toString方法中调用super.toString方法.
格式化:
PrintStream或PrintWriter对象
Object[] obj = {new Integer(5),new Double(5.6581)};
System.out.format("X= %d %f", obj);
System.out.printf("X= %d %f", obj);
java.util.Formatter
f = new Formatter(System.out)
f.format
"%-15.15s %5d %10.2f\n" //数据右对齐,-改变对齐方式;width针对所有的类型,域的长度;percision“.15”对于String是最大输出长度,对float是小数部分长度
正则表达式:
String类
"-4563".matches("(-|\\+)?\\d+")
“frank ..hi -hi”.split(“\\W+”)
“frank is you”.replaceAll(“(f|g)rank”, “Chris”)
java.util.regex.*
Pattern p = Pattern.compile("^[A-Z].+\\.$");
Matcher m = p.matcher("Aaaaab.");
boolean b = m.matches();
while(m.find()){
System.out.println(m.group() + " ");}
正则表达式的处理:
1. 用java.util.regex.Pattern类创建正则表达式,有参数Pattern.CASE_INSENSITIVE|Pattern.MULTILINE|Pattern.COMMENTS
2. 用java.util.regex.Matcher类得到Matcher;
3. 匹配结果,有matches(), split()等方法
Matcher的三个查找方法:
matches
永远匹配整个字符串
与find相互影响,可以用reset方法
find
查找子字符串,每次从剩下的字符串开始找
lookingAt
查找子字符串,每次从开头开始找
正则表达式的量词:
贪婪型:除非有设置,否则尽可能地贪婪匹配;
勉强型:懒惰的,最小匹配的,非贪婪的;
占有型:只有Java有,很高级,“占有的”量词不保存中间状态,防止回溯。
贪婪型
勉强型
占有型
如何匹配
X?
X??
X?+
一个或零个X
X*
X*?
X*+
零个或多个X
X+
X+?
X++
一个或多个X
X{n}
X{n}?
X{n}+
恰好n次X
X{n,}
X{n,}?
X{n,}+
至少n次X
X{n,m}
X{n,m}?
X{n,m}+
X至少n次,且不超过m次
组(Groups):0为整个表达式,比如A(B(C))D, 0组是ABCD,1是BC, 2是C。
gourpCount方法返回不含0组的分组数目。
group返回最后一次0组的匹配,group(int i)指定的组号匹配;
正则表达式的应用:
Split
Arrays.toString(Pattern.compile("!!").split(input))
replaceAll
replaceFirst
appendReplacement:替换时,允许操作用来替换的的字符串
appendTail执行appendReplacement后,将剩下部分复制
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(sb, value);
//从头一直到匹配的地方,replace匹配处
}
matcher.appendTail(sb); //剩下的部分,“谢谢光临”
Reset方法,将现在的matcher对象换成新的字符串
m.reset(“This is new string to apply Regular Expression”);
文本中提取数字,Scanner类
有nextLine,nextInt,nextDouble,useDelimiter, 以及match,group等正则表达式方法。
备注:JAVA之前用类StringTokenizer,之后用正则表达式和Scanner对象替代了。
- 1基础-013:字符串
- 字符串 NSString基础---1
- 字符串-基础
- 字符串基础
- 字符串基础
- 字符串基础
- C++字符串系列1:字符编码基础
- C++字符串系列1:字符编码基础
- 【Python基础】字符串
- 基础_C# 字符串
- poj 1002 (字符串基础)
- C#基础加强--字符串
- 程序设计基础之:字符串
- Quicksum(字符串基础)
- 字符串基础NSString
- java基础__string字符串
- Python3.4字符串基础
- Python<3>字符串基础
- poj-1850
- QTCreator3.0.0的BUG。。。竟然写铁 鞋两个字。。后面标点符号会显示不见(其实在)。。。
- HDU 4160 Dolls(DAG最小路径覆盖)
- Thread的run()方法与start()方法
- hibernate缓存:一级缓存和二级缓存
- 1基础-013:字符串
- swftools linux下安装
- 搜索型注入
- powerdesigner16.5下载地址与破解文件地址
- Python 目录结构,代码规范
- IA32寄存器使用惯例
- ADT黑盒设计——C的抽象数据类型的设计与实现
- 修改图片效果
- Spring MVC 教程,快速入门,深入分析