(说明,该文章翻译自Top 10 questions of Java Strings)
下面是关于Java字符串最常被问到的十个问题
==
还是使用equals()
?简单来说,"=="用来比较引用是否相等而"equals()用来比较值是否相等",除非你是要检查两个字符串的是否是相同的对象,你应该使用equals()。
如果你了解字符串截取原理的话那么就更好了。
字符串是不可变的,这就意味着一旦他们被创建,他们就不会保持不变除非被垃圾回收器回收掉。可是对于一个字符数组你可以显示的改变他的元素值,而安全敏感的这些信息不回总是存在系统中。
版本7是OK的,从JDK7开始,我们可以使用字符串作为多分支选择条件,在版本6中我们不能使用字符串作为选择条件。
// java 7 only!
switch (str.toLowerCase()) {
case "a":
value = 1;
break;
case "b":
value = 2;
break;
}
int n = Integer.parseInt("10");
简单但是很频繁的被用到而且有时候容易被忽略。
我们可以简单的时候正则表达式。"\s"表示空格"","\t","\r","\n"
String[] strArray = aString.split("\\s+");
在JDK6中,substring()方法针对已经存在的字符串给但是不会创建一个新的。为了创建一个用新的数组表示的新的字符串,你可以像下面这样添加一个空的字符串:
str.substring(m, n) + ""
这样讲创建一个新的字符数组用来表示新的字符串,上面的代码有时候可以让你的代码变得快速,因为垃圾回收器可以收集不再使用的字符串而只保留子串。
在Oracle JDK7中,substring()创建一个新的字符数组而不是使用原来已经存在的。请看substring() difference between JDK 6 and JDK 7.。
String vs StringBuilder:StringBuilder 是可变的,这意味找你可以修改它在创建完以后。
StringBuilder vs StringBuffer:StringBuffer 是线程同步的,这意味着它是线程安全的但是比StringBuilder慢一些。
在Python中,我们可以使用乘以一个数组去复制字符串。在Java中门可以使用 Apache Commons Lang包中的StringUtils 的repeat()方法:
String str = "abcd";
String repeated = StringUtils.repeat(str,3);
//abcdabcdabcd
String str = "Sep 17, 2013";
Date date = new SimpleDateFormat("MMMM d, yy", Locale.ENGLISH).parse(str);
System.out.println(date);
//Tue Sep 17 00:00:00 EDT 2013
使用 Apache Commons Lang包中的StringUtils类
int n = StringUtils.countMatches("11112222", "1");
System.out.println(n);