1 尽量用StringBuilder 不要用String,因为编译器底层会自动帮你用StringBuilder
2 如果想要打印出对象的内存地址,不要在toString用this,这样会产生无限的迭代
public class A
{
public String toString()
{
return "A:"+this;
}
}
因为编译器看到了一个String对象后面跟着+ 而再后面的对象不是String,于是编译器试着将this转换成一个String,怎么转换呢,就是通过调用this的toString方法,于是就发生了递归调用,如果真的想打印出对象的内存地址,应该调用Object.toString方法,这才是负责此任务的方法,所以不应该使用this,而是应该调用super.toString();
public class A
{
public String toString()
{
return "A:"+super.toString();
}
}
3
boolean |
4 split()就是以()里面的内容隔开字符串 返回一个String数组 它还有一个重载的版本 它允许你限制字符串分割的次数
“什么”+表示“什么”的后面可能跟着许多个“什么”
\\w表示非字符串 比如逗号或者空格什么的 n\\W+ 表示以n开头的一个或者多个非单词字符 ;小写w : n\\w+表示以n开头的一个或者多个单词字符。
replace(正则表达式,替换的东西),replaceAll("要替换的|要替换的 要替换的|",替换的) 其中replaceAll要替换的部分可以用|分开表示其中任意一个都行
String | replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 |
String | replace(CharSequence target,CharSequence replacement) 使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。 |
5一般说来 比起功能有限的String类,我们更愿意构造功能强大的正则表达式对象,只需导入Java.util.regex包,然后用static Pattern.compile方法来编译你的正则表达式,他会很据你传入的String类型的正则表达式生成一个Pattern对象。接下来 把你想要检索的字符串传入Pattern对象的matcher方法,同时生成一个Matcher对象,它有很多功能可以用,他的replace方法可以将所有匹配的部分都替换成你传入的参数。
Matcher类中的方法:
String | group() 返回由以前匹配操作所匹配的输入子序列。 |
有关正则表达式的具体使用举例:
package com.itany.www.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class T
{
/*
* thinking in java page300
*/
public static void main(String[] args)
{
System.out.println("input:\""+args[0]+"\"");
for(String arg:args)
{
System.out.println("regex:\""+arg+"\"");
Pattern pattern=Pattern.compile(arg);//正则表达式类 可以用静态方法产生pattern对象 ;也 可调用matcher方法产生matcher类
Matcher matcher=pattern.matcher(args[0]);
while(matcher.find())
{
System.out.println("Match\""+matcher.group()+"\"at positions"+matcher.start()+"-"+(matcher.end()-1));
}
}
}
}
编译后的Pattern对象还提供了spilt方法,它从匹配了regex的地方分割输入字符串,返回分割后的子字符串String数组。
find()会一直迭代的搜索下去,find(int i)就会设置好搜索的起点。find()是找到一个匹配就停止,再下一个
6 组是用括号划分的正则表达式:0表示整个组,组号1表示第一队被括号扩起来的 依次类推
A(B(C))D 有3个组 组0是ABCD 组1是BC 组2是C 从左往右
在一次find匹配出来的结果中(比如碰到空格符停止),可能在结果中有许多组(是由括号对分产生的),我们可以对具体的哪一组进行操作,m.group(i)可以打印出来。
在匹配操作完成之后,start()会返回先前匹配其实位置的索引,而end()会返回所匹配的最后字符的索引加一的值。
匹配失败之后如果调用start或end会产生异常。
7 matches
方法尝试将整个输入序列与该模式匹配。lookingAt
尝试将输入序列从头开始与该模式匹配。find
方法扫描输入序列以查找与该模式匹配的下一个子序列。
matches
()当且仅当整个区域序列匹配此匹配器的模式时才返回 true,lookingAt
当且仅当输入序列的前缀匹配此匹配器的模式时才返回true
8 Pattern产生的Matcher类有一个split(regex,int num)第二个参数是限制分割的次数