?!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
׃软g开发公司本文介lJava中关于String最常见?0个问?
1. ׃软g开发公司字W串比较,使用 "==" q是 equals() ?
单来? "==" 判断两个引用的是不是同一个内存地址(同一个物理对?.
?equals 判断两个字符串的值是否相{?
除非你想判断两个string引用是否同一个对?否则应该L使用 equals()Ҏ.
如果你了?字符串的ȝ ( String Interning ) 则会更好地理解这个问?/p>
2. ׃软g开发公?/strong>对于敏感信息,Z使用char[]要比String更好?
String是不可变对象, 意思是一旦创?那么整个对象׃可改? 即新手觉得String引用变了,实际上只?指针)引用指向了另一?新的)对象.
而程序员可以明确地对字符数组q行修改,因此敏感信息(如密?不容易在其他地方暴露(只要你用完后对char[]|?).
3. ׃软g开发公?/strong>在switch语句中用String作ؓcase条g?
?JDK7 开?q是可以?啰嗦一?Java 6 及以前的版本都不支持q样?
[java]
// 只在java 7及更高版本有?
switch (str.toLowerCase()) {
case "a":
value = 1;
break;
case "b":
value = 2;
break;
}
4. ׃软g开发公?/strong>转换String为数?/strong>
对于非常大的数字请用Long,代码如下
[java]
int age = Integer.parseInt("10");
long id = Long.parseLong("190"); // 假如值可能很?
5. ׃软g开发公?/strong>如何通过I白字符拆分字符?/strong>
String ?split()Ҏ接收的字W串会被当做正则表达式解?
"\s"代表I白字符,如空?quot; ",tab制表W?quot;\t", 换行"\n",回R"\r".
而编译器在对源代码解析时,也会q行一ơ字面量转码,所以需?quot;\\s".
[java]
String[] strArray = aString.split("\\s+");
6. ׃软g开发公?/strong>substring() Ҏ内部是如何处理的?
在JDK6?substring()Ҏq是q原来的char[]数组,通过偏移和长度构造了一?quot;?quot;的String?/p>
惌substring()取得一个全新创建的对象,使用如下q种方式:
[java]
String sub = str.substring(start, end) + "";
当然 Java 7 ?substring()创徏了一个新的char[] 数组,而不是共?
惌了解更多,请参? JDK6和JDK7中substring()Ҏ及其差异
7. ׃软g开发公?/strong>String vs StringBuilder vs StringBuffer
StringBuilder 是可变的,因此可以在创Z后修改内部的?
StringBuffer 是同步的,因此是线E安全的,但效率相Ҏ?
8. ׃软g开发公?/strong>如何重复拼接同一字符?
Ҏ1: 使用Apache Commons Lang 库的 StringUtils 工具c?
[java]
String str = "abcd";
String repeated = StringUtils.repeat(str,3);//abcdabcdabcd
Ҏ2:
使用 StringBuilder 构? 更灵z?
[java]
String src = "name";
int len = src.length();
int repeat = 5;
StringBuilder builder = new StringBuilder(len * repeat);
for(int i=0; i<repeat; i++){
builder.append(src);
}
String dst = builder.toString();
9. ׃软g开发公?/strong>如何String转换为日?
[java]
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String str = "2013-11-07";
Date date = format.parse(str);
System.out.println(format.format(date));//2013-11-07
10. ׃软g开发公?/strong>如何l计某个字符出现的次?
同样使用Apache Commons Lang ?StringUtils c?
[java]
int n = StringUtils.countMatches("11112222", "1");
System.out.println(n);