Java中关于String类型的10个问题

  1. 如何比较两个字符串?用“==”还是equals
    “==”是用来检测两个引用是不是指向内存中的同一个对象,而equals()方法则检测的是两个对象的值是否相等。只要你想检测俩字符串是不是相等的,你就必须得用equals()方法。

  1. 为什么安全敏感的字符串信息用char[]会比String对象更好?
    String对象是不可变的,这就意味着直到java垃圾回收器回收之前它们都不会发生变化的。用数组的话,就可以很明确的修改它任何位置的字符元素。这样的话,如密码等安全敏感的信息就不会出现在系统的任何地方。
  2. 字符串对象能否用在switch表达式中?
    从JDK7开始的话,就可以在switch条件表达式中使用字符串了,7之前的版本是不可以的。
switch (str.toLowerCase()) {
      case "a":
           value = 1;
           break;
      case "b":
           value = 2;
           break;
}
  1. 如何将字符串转换为整型数值?
    int n = Integer.parseInt("10");
  2. 如何用空格去分隔字符串?
    使用正则表达式来进行分隔。“\s”就表示空格,还有如””,”\t”,”\r”,”\n”
String[] strArray =Str.split("\\s+");
  1. substring()方法具体是都干了些啥?
    在JDK6中,这个方法只会在标识现有字符串的字符数组上 给一个窗口来表示结果字符串,但是不会创建一个新的字符串对象。
    因此,如果需要创建个新字符串对象,可以这样在结果后面+一个空的字符串:
    str.substring(m, n) + ""
    这么写的话就会创建一个新的字符数组来表示结果字符串。同时,这么写也有一定的几率让你的代码跑的更快,因为垃圾回收器会吧没有在使用的大字符串回收而留下子字符串。
    JDK7中的substring()方法会创建一个新的字符数组,而不用之前存在的。

  1. String&StringBuilder&StringBuffer
    这三个里面: StringBuilder和StringBuilder是可变的,这就意味你在创建对象之后还可以去修改它的值
    StringBuffer和StringBuffer相比较:StringBuffer是同步的,意味着它是线程安全的,但是就会比StringBuilder慢些。

  1. 如何快速重复构造一段字符串?
    利用 Apache Commons lang3包中的StringUtils类的repeat()方法。
String repeated = StringUtils.repeat(str,3);
    //运行结果:abcdabcdabcd
  1. 如何将时间格式的字符串转换成Date对象?
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 lang3包中的 StringUtils类就可以完成这个工作。

int  n=StringUtils.countMatches("11112222", "1");
System.out.println(n);

说到StringUtils工具类,我们在页面输入框之后,提交表单到后台,封装参数之后要判断有没有输入,用if(args!=null)直接判断没有利用StringUtils工具类的isNotBlank(args)方法来得好,因为输入框即使没有输入,如果用模型驱动接收的时候,传递到后台的值不一定是Null,有时候是空字符串,这时候用StringUtils.isNotBlank(args)更合适,不会出现错误的现象。

推荐阅读更多精彩内容