ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
http://www.importnew.com/7174.html 本文由 [ImportNew](http://www.importnew.com/) - [邢 敏](http://www.importnew.com/author/xingmin) 翻译自 [programcreek](http://www.programcreek.com/2013/09/top-10-faqs-of-java-strings/)。欢迎加入[翻译小组](http://group.jobbole.com/category/feedback/trans-team/)。转载请见文末要求。 以下是10个最常见的Java字符串问题。 **1、如何比较字符串?使用“==”还是使用equals() ?** 简单地说,“==”测试引用同一地址,而equals()测试值是否相等。除非需要检查两个字符串是否是同一个对象,否则应该总是使用equals()方法。 如果你知道字符串驻留([string interning](http://www.programcreek.com/2013/04/why-string-is-immutable-in-java/))的概念的就更好了。 *译注:字符串驻留是指为每个独立的String值只保留一个不可改变的拷贝,详细解释可参见[String interning词条](http://en.wikipedia.org/wiki/String_interning)。* **2、为什么为在处理私密信息的时候,选择char [ ]比String好?** String是不可改变的。这意味着一旦String对象被创建,那个地址上的值将保持不变,直到垃圾收集器有空来做自动清理。而使用char[ ]可以(在用完后)明确地修改它的元素。这种一来,私密信息(例如密码)就不会在系统的任何地方出现。 **3、我们可以在switch语句中用String作分支条件吗?** 从JDK 7开始是可以的。我们可以使用String符串作为Switch条件。第JDK 6之前,我们不能使用String作为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 、如何转换String为int?** | 1 | `int` `n = Integer.parseInt(``"10"``);` | 调用很简单,使用如此频繁以致有时会被忽略。 **5 、如何用空白符分割字符串?** 可以简单地使用正则表达式做分割。“ \s ”代表所有空格符,如“ ”、 “ \ ”、 “ \ r”、“ \ n ”。 | 1 | `String[] strArray = aString.split(``"\\s+"``);` | **6 、substring() 具体干了些什么?** 在JDK 6中,substring() 提供了一个显示已有字符串char[]的接口,但不创建新字符串。如果需要创建一个新的char[]表示的字符串,可以像下面一样与一个空字符串相加: | 1 | `str.substring(m, n) +` `""` | 这样会创建一个新的字符数组,表示新的字符串。示例方法有时可以使代码运行更快,因为垃圾收集器可以收集未使用的大字符串只保留子串。 在Oracle JDK 7中 ,substring()会创建一个新的字符数组而不是使用现有的。点击这个[链接](http://www.programcreek.com/2013/09/the-substring-method-in-jdk-6-and-jdk-7/)有图解说明JDK 6和JDK 7的substring()之间的差异。 **7、String vs StringBuilder vs StringBuffer** * String 与StringBuilder的区别:StringBuilder的是可变的,这意味着可以在创建以后再作修改。 * StringBuilder与StringBuffer的区别: StringBuffer的是同步的,这意味着它是线程安全的,但速度比StringBuilder慢。 **8、如何重复一个字符串?** 在Python中,我们可以乘以一个数字来重复字符串。在Java中,我们可以使用Apache公共语言包(Apache Commons Lang package)中的repeat()。 | 1 2 3 | `String str =` `"abcd"``;` `String repeated = StringUtils.repeat(str,``3``);` `//abcdabcdabcd` | **9、如何转换字符串为日期?** | 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公共语言包中的StringUtils: | 1 2 | `int` `n = StringUtils.countMatches(``"11112222"``,` `"1"``);` `System.out.println(n);` | **附加题** 你知道[如何检测一个字符串是否只包含大写字母吗](http://www.programcreek.com/2011/04/a-method-to-detect-if-string-contains-1-uppercase-letter-in-java/)?