Skip to content

Latest commit

 

History

History
93 lines (77 loc) · 3.39 KB

字符串.md

File metadata and controls

93 lines (77 loc) · 3.39 KB

字符串

String和StringBuilder

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+)*