String 的几个 方法。 (java)

本文介绍了 Java 中 String 类的几个常用但容易被忽视的方法,包括如何判断字符串的开头和结尾、进行大小写不敏感的字符串比较及排序,并展示了如何使用 String.valueOf() 处理 null 对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写了几年 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();
    }

这是为什么呢?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值