计划围绕以下几个方面
1.内存
2.正则表达式
3.String.format
4.编码
1.内存
先来看个经典的例子
public class Blog { public static void main(String[] args) { String s0 = "123"; String s1 = "123"; String s2 = new String("123"); String s3 = new String("123"); System.out.println(s0 == s1);// true System.out.println(s2 == s3);// false System.out.println(s1 == s2);// false } }
String是字符串常量,java.lang.String被设计为final类,不允许被继承和修改。 例子中的s0和s1都相当于常量,直接放在内存的stack中。而s2和s3作为引用类型被new出来,都是放在heap中。而java的 == 是直接判断栈中的值,所以s0和s1相等,而当用s1和s2比较时,实际是用s1在stack中的“123”和s2在stack中引用的内存地址相比较,所以不相等。
String不是基本数据类型,如果需要使用字符串变量时应该使用StringBuffer或者StringBuilder,前者线程安全。
————————————————————————————————————————————————————————
2.正则
首先介绍几个java.lang.String中的常用使用正则的方法:
String.matches
String.replaceAll
String.replaceFirst
String.split
下面是例子代码
public class Blog { public static void main(String[] args) { String s0 = "ccc123aaa456bbb"; System.out.println(s0.matches(".*\d+.*")); System.out.println(new String(s0).replaceAll("\d", "-")); System.out.println(new String(s0).replaceFirst("\d", "-")); String[] split = s0.split("\d+"); for (String string : split) { System.out.println(string); } } }
matches用来判断一个字符串是否符合某些规则,比如常见的邮箱合法检测都可以用正则来实现。
split是分割,把字符串按其中匹配正则的子串切割成几段返回字符串数组。
replaceAll和replaceFirst是将string中的符合此正则的串替换成想要替换的字符串。
这个在开发中也可以用,如果使用Eclipse想把一个很长的串比如“aaa”,“aaa”,“aaa”,“aaa”,“aaa”,“aaa”,想分成多行排列,可以使用ctrl+F中的Regular expression
然后replaceAll即可。
而java提供的正则工具类是
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Blog { public static void main(String[] args) { Pattern pattern = Pattern.compile("\d"); Matcher matcher = pattern.matcher("1"); boolean result = matcher.find(); System.out.println(result); } }
关于正则的规则,可以在java doc的java.util.regex.Pattern中找到详细介绍。要注意java的正则和其他js等语言的正则不一定完全通用,因为各个语言正则使用的标准不一定一样。
简单贴几条
字符 | |
---|---|
x | 字符 x |
\ | 反斜线字符 |