下面是关于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;
}
// java 7 only!
switch (str.toLowerCase()) {
case "a":
value = 1;
break;
case "b":
value = 2;
break;
}
4.怎么将一个字符串转为int?
int n = Integer.parseInt("10");
int n = Integer.parseInt("10");
简单但是很频繁的被用到而且有时候容易被忽略。
5.怎么使用空格去拆分字符串?
我们可以简单的时候正则表达式。"\s"表示空格"","\t","\r","\n"
String[] strArray = aString.split("\\s+");
String[] strArray = aString.split("\\s+");
6.subsring()方法实际上做了什么事情
在JDK6中,substring()方法针对已经存在的字符串给但是不会创建一个新的。为了创建一个用新的数组表示的新的字符串,你可以像下面这样添加一个空的字符串:
str.substring(m, n) + ""
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
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
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);
int n = StringUtils.countMatches("11112222", "1");
System.out.println(n);