写了几年 java 程序,今天才看到 String 的 endwith startwith 。实在不好意思。
还有就是 不区分大小写的 字符串比较。String.CASE_INSENSITIVE_ORDER
以后需要养成习惯,对于无论熟悉不熟悉的类(库),时不时,多看两眼方法。
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
public class StringUsage {
// 几个欧不太用的方法。 public static void main(String[] args) {
// 判断字符串首/尾。
String contentS = "test String again. test ";
System.out.println(contentS);
System.out.println("contentS.startsWith(/"test/")/t"
+ contentS.startsWith("test"));
System.out.println("contentS.endsWith(/"test/")/t"
+ contentS.endsWith("test"));
// 忽略大小写的字符串比较方法。 System.out
.println("contentS.compareToIgnoreCase(contentS.toUpperCase()))/t"
+ contentS.compareToIgnoreCase(contentS.toUpperCase()));
// 不区分大小写的字符串比较。 Comparator cmprStr = String.CASE_INSENSITIVE_ORDER;
List lstStr = new LinkedList();
// 准备数据。
lstStr.add("test");
lstStr.add("Test");
lstStr.add("tEst");
lstStr.add("rest");
lstStr.add("sest");
// 不区分大小写的排序。
Collections.sort(lstStr, cmprStr);
System.out.println(lstStr);
// 区分大小写的排序。
Collections.sort(lstStr);
System.out.println(lstStr);
System.out.println("/ntest String.valueOf()");
// 用 valueOf 处理 null 对象的字符串转换。
try{
String ss = null;
System.out.println(ss);
System.out.println(String.valueOf(null)); // 比较奇怪的地方 } catch (RuntimeException e1) {
e1.printStackTrace();
}
BigDecimal db = null;
try {
System.out.println(((BigDecimal)db).toString());
} catch (Exception e) {
e.printStackTrace();
}
try {
System.out.println(String.valueOf(db));
} catch (Exception e) {
e.printStackTrace();
}
db = new BigDecimal("100.00");
try {
System.out.println(((BigDecimal)db).toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
test String again. test
contentS.startsWith("test") true
contentS.endsWith("test") false
contentS.compareToIgnoreCase(contentS.toUpperCase())) 0
[rest, sest, test, Test, tEst]
[Test, rest, sest, tEst, test]
test String.valueOf()
null
java.lang.NullPointerException
at java.lang.String.(Unknown Source)
at java.lang.String.valueOf(Unknown Source)
at test.StringUsage.main(StringUsage.java:50)
null
java.lang.NullPointerException
at test.StringUsage.main(StringUsage.java:58)
100.00
20060312
比较有趣的情况是 直接 传 null 给 valueOf 。会抛空指针错。看 String 的源码。估计是此时 调用的是
public static String valueOf(char data[]) {
return new String(data);
}
异常是从
public String(char value[]) {
int size = value.length;
char[] v = new char[size];
System.arraycopy(value, 0, v, 0, size);
this.offset = 0;
this.count = size;
this.value = v;
}
里的第一句出来的。
没有走
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
这是为什么呢?