1:string类是不可变的,StringBuffer是可变的,可变与不可变:
String a ="asd";
String b="dfdf";
String c =a+ b;在内存中,相当于新建了一个字符串C,把俩者先后放到C里面。
StirngBuffer a ="asd";
StringBuffer b="dfdf";
a.append(b);在内存中,是将b加到a的字符串中,这就是不同。
那么对于下面设计字符串的累加,效率肯定高些
记住写具体的方法,charAt(),indexOg,startWith(),endWith(),toCharArray(),
2:正则表达式的内容
正则是一门艺术,对于java语言正则的学习,同样重要。在其他语言中,用\d表示一位数字,在其他语言中\\表示在正则中插入一个普通的反斜线,请不要给我任何特殊意义。
正如javascript一样:
一些标点如:^ $ . * ? + ! | / \ ( ) [ ] { }具有特殊意义,要想在正则表达式中表现我i直接量用\, 写法/\d{3,5}\\/ 。表示一个反斜线
"javascript".search(/script/i); 234.matches(/\d(3,)/);
对于java而言,\\表示插入一个正则表达式的反斜线,后面的字符有特殊意义。如果你想表示一个数字,正则应该是\\d, 并且wo我们在字符串中\\反斜线表示一个\(转义字符),也就是说
"\\".matches("\\\\"); 正则中才行\\表示有特殊意义,
表示js的特殊字符,同样需要俩个\\*才行
A:Stirng 的match 与 replaceAll ,replace,spilt
这些方法都是string提供的
"-1234".match(-?\\d);
String s = "Splitting.knights"
s.replaceAll( "Splitting " , "banana");
3:pattern ,Matcher ,以及方法find,matches,start,end,kongAt
空行的正则:/^(\\s&&[^\n])+\n$/
邮件的正则:/(\\w+[\\-])+@(\\w+[\\-])+\\.(\\w+[\\-])+$/
eg1:
String s ="123-345-5678-12";
Pattern p = Pattern.compile("\\d{3,5}");
Matcher m = p.matcher(s);
System.out.println(m.matches());
System.out.println(m.find());
System.out.println(m.find());
System.out.println(m.find());
System.out.println(m.find());
结果:
false
true
true
false
false
String s ="123-345-5678-12";
Pattern p = Pattern.compile("\\d{3,5}");
Matcher m = p.matcher(s);
m.reset();
System.out.println(m.matches());
System.out.println(m.find());//匹配子串。
// System.out.println("m.start() :"+m.start() +" m.end() "+m.end());//获得查找字串的位置
System.out.println(m.find());
System.out.println(m.find());
System.out.println(m.find());
// System.out.println(m.lookingAt());//每次从最顶找字串,返回true
结果:
false
true
true
false
false
可见:m.matches与m.find()有冲突,matches从前到后看是否匹配,吞掉了已经匹配的字符。用reset才恢复。
下续..............................