- String对象是不可变的,具有只读特性
- 预先指定StringBuilder的大小可以避免多次重新分配缓冲(那么:如果超出预先指定的大小,会出现什么情况呢?)
- 重写自定义类的toString()方法的时候,注意避免this的使用,否则会导致无穷的递归(正确的方法应该是调用super.toString()方法)
- 格式修饰符,在System.out.format当中(比如%d,%f等等)
- System.out.printf()和System.out.format()方法等同
- Formatter的构造器经过重载可以接受多种输出目的地,比如PrintStream,OutputStream和File
- Formatter.format(%-15.15s %5d %10.2f", name, qty, price):-表示左对齐,默认是右对齐;第一个15表示最小宽度,第二个15表示最大宽度(针对string)或者最多小数点位数(针对浮点数)
- String.format("%05X: ", n):这里的0表示数字前面补0,具体可参考链接:http://blog.csdn.net/lonely_fireworks/article/details/7962171/
- 在Java中,\\的含义是我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。比如,想表示一位数字,那么应该是\\d;如果想插入一个普通的反斜线,应该是\\\\
- 总之,有特殊含义的就需要用\\进行转义,比如+号;而-号是不需要转义的
- Matcher.matches和Matcher.lookingAt方法会改变Matcher本身的状态,从而影响到后续find方法的行为。实例如下:
Pattern p = Pattern.compile(
"abba"
);
Matcher m = p.matcher(
"abbacde"
);
while
(m.find()){
System.out.println(
"Match "
+ m.group() +
" at positions "
+
m.start() +
"-"
+ (m.end() -
1
));
}
System.out.println(m.matches());
System.out.println(m.lookingAt());
输出:
Match abba at positions 0-3
false
true
调整一下顺序:
Pattern p = Pattern.compile(
"abba"
);
Matcher m = p.matcher(
"abbacde"
);
System.out.println(m.matches());
System.out.println(m.lookingAt());
while
(m.find()){
System.out.println(
"Match "
+ m.group() +
" at positions "
+
m.start() +
"-"
+ (m.end() -
1
));
}
输出变为:
false
true
find方法找不到任何匹配!没有任何输出
- appendReplacement()和appendTail()方法:
- appendReplacement()
- appendTail()
- Scanner可以接受各种类型的输入对象(构造器),可以指定定界符(useDelimiter()方法),同时可以使用自定义的正则表达式进行扫描(hasNext(String regex))
- StringTokenizer()方法已经过时,可以利用Scanner和正则表达式进行替换
以上就是关于字符串的笔记内容,如果错误,敬请指出,谢谢!