学习总结-Thinking In Java Chapter 13 strings
来源:互联网 发布:java中接口怎么写 编辑:程序博客网 时间:2024/06/01 09:31
学习总结
本篇是对学习【Java编程思想 第13 章字符串】的学习总结。
可以证明,字符串操作时计算机程序设计中最常见的行为。
不可变的String
查看JDK文档你就会发现,String类中每一个看起来会修改String值得方法,实际上都是创建了一个全新的String对象,包含修改后的字符串内容。而最初的String对象则丝毫未动。
重载“+”与StringBuilder
String支持“+”和“+=”的重载。当我们对字符串做拼接的操作时,编辑器自动引入java.lang.StringBuilder类,因为它更高效。
用于String的“+”和“+=”是Java中仅有的两个重载的操作符,而Java不允许程序员重载任何操作符
String上的操作
格式化输出
System.out.printf();System.out.format();
底层实现里printf()就是调用format();
也可以用下面的语法:
//oneFormatter f = new Formatter(System.out);f.format("%d\n", u);//twoString.format("%d\n", u);//其地底层实现也是依赖Formatter public static String format(String format, Object... args) { return new Formatter().format(format, args).toString();}
格式化说明符
%[argument_index][flags][width][.precision]conversion−[argumentindex ]:
- [flags]: 默认是右对齐,可以用“-”标志来改变方向
- [width]: 最大尺寸
- [.precision]: 用于浮点数,表示小数点后要显示的位数
- conversion:数据类型标志
常见的类型转换
正则
常规使用的匹配
String.matches(pattern);//Pattern p = Pattern.compile(pattern);Matcher m = p.matcher(string);while(m.find()){ m.group();}
量词
量词描述一个模式吸收输入文本的方式。
- 贪婪型:尽可能的匹配
- 非贪婪型?:这个量词匹配满足所需模式的最少字符数
- 占有型+(java特有):当正则表达式被应用于字符串时,它会产生相当多的状态,一遍在失败时可以回溯。而“占有的”量词并不保存这些状态,由此它们可以防止回溯。它们常常用于防止正则表达式失控,因此可以是正则表达式执行起来更有效。
Pattern标记
Pattern.CASE_INSENSITIVE (?i):大小写不敏感。
Pattern.DOTALL (?s):在dotall模式下,.匹配所有字符,包括行终结符。
Pattern.MULTILINE (?m):在多行模式下,表达式^和$分别匹配一行的开始和结束。
于是我们可以这样写正则:(?s)(?i)/\\*(.*?)\\*/|//(.*?)
查找
不同于Python一下子就可以找出所有匹配,Java一次只能找到一个匹配。
Pattern p = Pattern.compile(pattern);Matcher m = p.matcher(string);while( m.find() ) { print("Match \"" + m.group() + "\" at positions " + m.start() + "-" + m.end());}
替换操作
正则表达式特别便于替换文本,它提供了许多方法:repalceFirst(String replacement),replaceAll(String replacement),appendReplacement(StringBuffer sbuf, String replacement)。
特别说明一下appendReplacement,它不像repalceFirst和replaceAll替换第一个匹配或者所有匹配,它执行渐进式的替换。
// 将所有元音字母大写 StringBuffer sb = new StringBuffer(); Pattern pattern = Pattern.compile("[aeiou]"); Matcher matcher = pattern.matcher(match); while ( matcher.find() ) { //将当前匹配子串替换为指定字符串,并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到 StringBuffer 对象里 matcher.appendReplacement(sb, matcher.group().toUpperCase()); } //将最后一次匹配工作后剩余的字符串添加到 StringBuffer 对象里。 matcher.appendTail(sb); print(sb.toString());
通过reset()方法,可以将现有的Matcher对象应用于一个新的字符序列。
public class Resetting { public static void main(String[] args) { Pattern p = Pattern.compile("[frb][aiu][gx]"); Matcher m = p.matcher("fix the rug with bags"); while ( m.find() ) { print(m.group()); } // 将现有的Matcher对象应用于一个新的字符序列 m.reset("fix the rig with rags"); while ( m.find() ) { print(m.group()); } }}
Matcher常用方法
- 学习总结-Thinking In Java Chapter 13 strings
- 学习总结-Thinking In Java Chapter 16 arrays
- 学习总结-Thinking In Java Chapter 19 enumerated
- 学习总结-Thinking In Java Chapter 8 polymorphism
- 学习总结-Thinking In Java Chapter 15 generics
- 学习总结-Thinking In Java Chapter concurrency(1)
- Thinking in java(chapter 2)
- Thinking in java Chapter 1 笔记
- thinking in java chapter 10 exercises
- 《Thinking in Java》总结
- 学习 thinking in java
- Thinking in java 异常总结
- 《Thinking in java 3th》第一次学习总结
- Thinking in Java --- Chapter 1 (Notes)
- Thinking In Java学习笔记
- Thinking in Java学习笔记
- thinking in java 学习笔记
- Thinking in java 学习资料
- 动态规划:HDU1864-最大报销额(处理带小数的dp问题)
- java学习笔记1
- 原生JavaScript实现内部链接
- linux 挂载和网络命令
- Java线程之定时器
- 学习总结-Thinking In Java Chapter 13 strings
- easyui table 属性页面 及增 删 改查按钮 close按钮
- Anguar.js介绍
- Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例
- BZOJ 3676 回文串
- foreach循环
- 运算符、表达式和语句
- 仿射变换和SURF特征点匹配
- Wins系统带选项复制命令robocopy的操作方法介绍