String对象是不可变的,每次我们修改String都会创建一个全新的String,而StringBuilder是却是可变的,我们如果要生成新的字符串一般先通过StringBuilder然后再调用toString()方法,这样效率更高,就 像前面用反射重写的toString()方法一样。
使用Formatter的format,输出时,我们要给告诉Formatter输出到哪里,这个可以是标准输出或者文件或者其他地方。然后调用format传入格式修饰符和参数就可以格式化输出。另外也可以使用类似c语言的printf。例子:
import java.io.*;
import java.util.*;
public class MyFormatter{
private Formatter f=new Formatter(System.out);
public void printDouble(double num){
f.format("右对齐保存两位小数占位至少5位:%5.2f\n",num);
f.format("左对齐保存三位小数占位至少6位:%-6.2f\n",num);
f.format("右对齐保存默认的六位小数占位10:%10f\n",num);
}
public void printInt(int num){
f.format("右对齐占位6位:%6d\n",num);
f.format("右对齐占位6位,不足6位前面补0:%06d\n",num);
f.format("左对齐占位6位:%-6d___\n",num);
}
public void printString(String str){
f.format("右对齐输出最长19最短15的字符串:%15.19s_____\n",str);
f.format("左对齐输出最长19最短15的字符串:%-15.19s_____\n",str);
}
public static void main(String[] args){
MyFormatter mf=new MyFormatter();
mf.printDouble(4.5);
mf.printInt(23);
mf.printString("zhouchaoyuan");
}
}
输出如下:
右对齐保存两位小数占位至少5位: 4.50
左对齐保存三位小数占位至少6位:4.50
右对齐保存默认的六位小数占位10: 4.500000
右对齐占位6位: 23
右对齐占位6位,不足6位前面补0:000023
左对齐占位6位:23 ___
右对齐输出最长19最短15的字符串: zhouchaoyuan_____
左对齐输出最长19最短15的字符串:zhouchaoyuan _____
哈哈,format确实非常好用! 另外我们还有类似c语言中的sprintf格式化输出到字符串的的静态方法String.fromat();
####正则表达式
正则表达式是强大而灵活的文本处理工具!一般String带有matches和split可以使用正则表达式,但是要更加通用的使用正则表达式有Pattern和Matcher,如:
import java.util.regex.*;
public class MyRegex
{
public static void pattern(String regex){
System.out.println("-------"+regex);
Pattern p=Pattern.compile(regex);
String str="Java now has regular expressions";
Matcher m=p.matcher(str);
while(m.find()){
System.out.println(m.group());
}
System.out.println("------------------");
}
public static void main(String[] args){
String[] regexs={"^Java","\\Breg.*","n.w\\s+h(a|i)s","s?","s*",
"s+","s{4}","s{1}.","s{0,3}"};
for(String regex:regexs){
pattern(regex);
}
}
}
另外:Scanner可以用来扫描输入,还可以通过useDelimiter来使用限定符(正则表达式)有效的输入,其功能强大完全可以代替StringTokenizer。
以下是一些常用的正则表达式:
qq号: [1-9][0-9]{4,}
中文字符: [\u4e00-\u9fa5]
HTML标签: <(.*)>.*|<(.*)/>
国内电话号码: d{3}-d{8}|d{4}-d{7}
网址URL:
http://([\w-]+.)+[\w-]+(/[\w-./?%&=]*)?
Email地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]w+)*