Java中关于String类型的10个问题
2017-12-21 本文已影响0人
寇寇寇先森
- 如何比较两个字符串?用“==”还是equals
“==”是用来检测两个引用是不是指向内存中的同一个对象,而equals()方法则检测的是两个对象的值是否相等。只要你想检测俩字符串是不是相等的,你就必须得用equals()方法。
- 为什么安全敏感的字符串信息用char[]会比String对象更好?
String对象是不可变的,这就意味着直到java垃圾回收器回收之前它们都不会发生变化的。用数组的话,就可以很明确的修改它任何位置的字符元素。这样的话,如密码等安全敏感的信息就不会出现在系统的任何地方。 - 字符串对象能否用在switch表达式中?
从JDK7开始的话,就可以在switch条件表达式中使用字符串了,7之前的版本是不可以的。
switch (str.toLowerCase()) {
case "a":
value = 1;
break;
case "b":
value = 2;
break;
}
- 如何将字符串转换为整型数值?
int n = Integer.parseInt("10");
- 如何用空格去分隔字符串?
使用正则表达式来进行分隔。“\s”就表示空格,还有如””,”\t”,”\r”,”\n”
String[] strArray =Str.split("\\s+");
- substring()方法具体是都干了些啥?
在JDK6中,这个方法只会在标识现有字符串的字符数组上 给一个窗口来表示结果字符串,但是不会创建一个新的字符串对象。
因此,如果需要创建个新字符串对象,可以这样在结果后面+一个空的字符串:
str.substring(m, n) + ""
这么写的话就会创建一个新的字符数组来表示结果字符串。同时,这么写也有一定的几率让你的代码跑的更快,因为垃圾回收器会吧没有在使用的大字符串回收而留下子字符串。
JDK7中的substring()方法会创建一个新的字符数组,而不用之前存在的。
- String&StringBuilder&StringBuffer
这三个里面: StringBuilder和StringBuilder是可变的,这就意味你在创建对象之后还可以去修改它的值
StringBuffer和StringBuffer相比较:StringBuffer是同步的,意味着它是线程安全的,但是就会比StringBuilder慢些。
- 如何快速重复构造一段字符串?
利用 Apache Commons lang3包中的StringUtils类的repeat()方法。
String repeated = StringUtils.repeat(str,3);
//运行结果:abcdabcdabcd
- 如何将时间格式的字符串转换成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)
更合适,不会出现错误的现象。