Java 关于String的十大常见问题
22
08 月

Java 关于String的十大常见问题

以下是常见关于Java中String排名前10位的问题。

1. 如何比较字符串(String)?使用“==”或者equals()方法?

简而言之,“==”判断引用是否相同,而equals() 方法测试值是否相等。除非你想检查两个字符串是否为同一个对象,那你应该总是使用equals()方法。

如果你了解string interning相关概念,将能更好的理解。

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

字符串是不可变的,这意味着一旦被创建,在垃圾回收前它们将保持不变。对于一个数组,你可以明确地改变它的元素。这样的话,安全敏感信息(如密码)将不会在系统中暴露。

3. 在swith语句中可以使用字符串作为条件吗?

对于JDK 7可以。从JDK 7起 ,我们可以使用字符串作为switch条件,但版本Java 6之前,这样是不行的。

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

4. 如何将字符串转换为int类型?

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

很简单,使用频繁但有时会被忽略。

5. 如何以空格字符分隔字符串?

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

String[] split(String regex)方法根据给定正则表达式的匹配拆分此字符串,所得数组中不包括结尾空字符串。\s表示空格,第一个\用于转义。

6. 字符串中的substring()方法到底做了什么?

在JDK 6中,substring()方法返回一个字符数组,其表示现有的字符串而不会创建新字符串。为了通过一个新的字符数组创建一个新的字符串,可以按以下方法添加一个空字符串:

str.substring(m, n) + ""

这将创建一个新的字符数组,表示新的字符串。有时上面的方法可以使你的代码更快,因为垃圾回收机制可以回收未使用的大字符串并仅保留子字符串。

在JDK 7中,substring()创建一个新的字符数组,而不是使用现有字符串。可以查看示意图区分的JDK 6和JDK 7中substring()的区别

7. String, StringBuilder, StringBuffer之间的对比

String vs StringBuilder:StringBuilder是可变的,这意味着你可以创建并修改字符串。
StringBuilder vs StringBuffer:StringBuffer是同步的,这意味着它线程安全,但比StringBuilder速度慢。

8. 如何重复字符串?

在Python中,我们可以通过只乘一个数字就可以重复字符串。在Java中,我们可以使用包org.apache.commons.lang下的StringUtils类中的repeat()方法:

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

9. 如何将字符串转换成日期类型?

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. 如何计算一个字符串中一个字符的出现次数?

使用包org.apache.commons.lang下的StringUtils类