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对象替代了。

 

 

0 0
原创粉丝点击