以下是排名前10位的常见关于Java字符串的问题。

1.如何比较字符串?用”==” 还是equals()?

简单来说,如果”==”测试是相等的,那么使用 equals()也是相等的。如果你想知道这两个对象是不是相同,你应该使用equals()。

如果你知道string interning那会让你更好理解。

2.在安全敏感信息方面为什么 char[] 优于字符串?

字符串是不可变的,这意味着一旦被创建,他们将保持不变,直到垃圾回收。但是数组话,你可以明确地改变它的元素。以这种方式,安全敏感信息(如密码)将不存在于系统中的任何地方。

3.可以使用string的switch 语法吗?

JDK7可以。从JDK 7中,我们可以使用字符串作为switch的条件。 JDK6版本(包括6)之前,我们不能使用字符串作为switch的条件。

1
2
3
4
5
6
7
8
9
// java 7 only!
switch (str.toLowerCase()) {
case "a":
value = 1;
break;
case "b":
value = 2;
break;
}

4.怎么把字符串转换成整形

1
int n = Integer.parseInt("10");

简单,如此频繁的使用,但是有时会被忽略。

5.怎么用空白来拆分字符串

我们可以使用正则表达式简单做分割。”\s”代表空格字符如”” “, “\t”, “\r”, “\n”。

1
String[] strArray = aString.split("\\s+");

6.substring() 实际做了什么?

在JDK6中,substring()方法提供了一个窗口给字符数组,它代表着现有的字符串,但不创建一个新的。要创建一个新的字符数组代表一个新的字符串,你可以做添加类似下面的一个空字符串:

1
str.substring(m, n) + ""

这将创建一个新的字符数组,用来表示新的字符串。上述方法有时可以使你的代码更加快速,因为垃圾收集器收集未使用的大串,只保留了子字符串。

在Oracle的JDK7中,substring()创建一个新的字符数组,而不是使用现有的。JDK6和JDK7的substring()的区别

7.String vs StringBuilder vs StringBuffer

String vs StringBuilder: StringBuilder是可变的,这意味着你可以在创建后修改。
StringBuilder vs StringBuffer: StringBuffer是同步的,这意味着它是线程安全的,但是比StringBuilder的慢。

8.怎么重复一个字符串?

在Python中,我们可以只乘了一个重复的数字就可以替换字符串。在Java中,我们可以使用来自Apache Commons Lang包中的StringUtils的repeat()方法。

1
2
3
String str = "abcd";
String repeated = StringUtils.repeat(str,3);
//abcdabcdabcd

9.怎么把一个字符串转换成date

1
2
3
4
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

10. 怎么计算字符串中出现#的次数

可以使用来自Apache Commons Lang包中的StringUtils的countMatches()方法。

1
2
3
int n = StringUtils.countMatches("11112222", "1");
System.out.println(n);
//4

延伸阅读

你知道(http://www.programcreek.com/2011/04/a-method-to-detect-if-string-contains-1-uppercase-letter-in-java/)[如何检测字符串只包含大写字母吗]?

参考文档