[译]关于Java 字符串最常被问到的十个问题

2023-03-10,,

(说明,该文章翻译自Top 10 questions of Java Strings)

下面是关于Java字符串最常问到的十个问题

1.怎么去比较字符串?使用==还是使用equals()?

简单来说,"=="用来比较引用是否相等而"equals()用来比较值是否相等",除非你是要检查两个字符串的是否是相同的对象,你应该使用equals()。

如果你了解字符串截取原理的话那么就更好了。

2.为什么对于安全敏感的信息字符数组比字符串更受青睐

字符串是不可变的,这就意味着一旦他们被创建,他们就不会保持不变除非被垃圾回收器回收掉。可是对于一个字符数组你可以显示的改变他的元素值,而安全敏感的这些信息不回总是存在系统中。

3.我们可以在多分支选择语句中使用字符串吗

版本7是OK的,从JDK7开始,我们可以使用字符串作为多分支选择条件,在版本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.怎么使用空格去拆分字符串?

我们可以简单的时候正则表达式。"\s"表示空格"","\t","\r","\n"

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

6.subsring()方法实际上做了什么事情

在JDK6中,substring()方法针对已经存在的字符串给但是不会创建一个新的。为了创建一个用新的数组表示的新的字符串,你可以像下面这样添加一个空的字符串:

str.substring(m, n) + ""

这样讲创建一个新的字符数组用来表示新的字符串,上面的代码有时候可以让你的代码变得快速,因为垃圾回收器可以收集不再使用的字符串而只保留子串。

在Oracle JDK7中,substring()创建一个新的字符数组而不是使用原来已经存在的。请看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中门可以使用 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.怎么统计一个字符在字符串中出现的次数?

使用 Apache Commons Lang包中的StringUtils类

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

[译]关于Java 字符串最常被问到的十个问题的相关教程结束。

《[译]关于Java 字符串最常被问到的十个问题.doc》

下载本文的Word格式文档,以方便收藏与打印。