原文戳这里:Top 10 questions of Java Strings
以下是10个最常见的java字符串问题。
1. 如何比较字符串?用"=="还是用equals()?
简单的说,"=="
用来测试是否引用了同一个字符串对象。equals()
用来测试字符串值是否相等。除非你想要检测两个字符串是否是相同的对象,否则你应该总是使用equals()
。
2. 对于安全敏感类的信息,为什么char[]优于String?
字符串是不可变的,这意味着一旦它们被创建,它们将保持不变,直到垃圾收集器清理为止。对于数组,你可以明确的修改它的元素。这样一来,安全性敏感信息(比如密码)将不会出现在系统的任何地方。
3. 是否可以在switch语句中使用String
java7及以后是可以的。从JDK7开始,我们可以使用string
作为switch
的条件,在JDK6之前,我们不能使用string
作为switch
语句的条件。
// java 7 only!
switch (str.toLowerCase()) {
case "a":
value = 1;
break;
case "b":
value = 2;
break;
}
4.如何把string转成int?
int n = Integer.parseInt("10");
简单,但是使用很频繁还容易忘记。
5.如何用空白符分割字符串?
String[] strArray = aString.split("\\s+");
6.substring()方法究竟做了什么?
在 JDK6中,substring()
方法给出了一个表示现有String的字符数组的窗口,而不是创建一个新字符串。为了创建一个由新char数组表示的新字符串,你可以添加一个空字符串,代码如下所示:
str.substring(m, n) + ""
这将创建一个表示新字符串的新的char数组。上面的代码,有时会让你的代码运行更快,因为垃圾回收器会收集无用的大字符串,并仅仅保留子字符串。
在Oracle JDK 7中,substring()
会创建一个新的char数组,而不是使用现有的char数组。想了解substirng()
在JDK6跟JDK7之间的差异,请戳这篇文章substring() difference between JDK 6 and JDK 7.
7. String vs StringBuilder vs StringBuffer
String
vs StringBuilder
: StringBuilder是可变的,这意味着它创建之后仍可以修改。
StringBuilder
vs StringBuffer
: StringBuffer是同步的,这意味着它是线性安全的,但是比StringBuilder更慢。
8.如何重复一个字符串?
在Python里,我们可以乘以一个数字来重复一个字符串。在Java中,我们可以使用StringUtils
中的repeat()
方法来实现。StringUtils
来自 Apache Commons Lang package.
import org.apache.commons.lang3.StringUtils;
String str = "abcd";
String repeated = StringUtils.repeat(str,3);
9.如何把字符串转换为日期?
try {
String str = "Sep 17, 2013";
Date date = new SimpleDateFormat("MMMM d, yy", Locale.ENGLISH).parse(str);
System.out.println(date);
}catch (Exception e){
}
10.如何去统计一个字符在字符串中出现的次数?
int n = StringUtils.countMatches("11112222", "1");
System.out.println(n);