十个最常见的java字符串问题

原文戳这里: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);

你可能感兴趣的:(十个最常见的java字符串问题)