String 的几个 方法。 (java)

写了几年 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<String> cmprStr = String.CASE_INSENSITIVE_ORDER;
  List<String> lstStr = new LinkedList<String>();
  // 准备数据。
  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.<init>(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();
    }

这是为什么呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值