博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java使用字符串的几个常见问题
阅读量:5774 次
发布时间:2019-06-18

本文共 2637 字,大约阅读时间需要 8 分钟。

hot3.png

今天上班的时候发现有人使用==来比较空串"",本人一直都是使用equals来比较的,所以特意上网查询了一下,有部分内容借鉴网上的blog。
以下列举10个比较常见的Java字符串问题。
1. 如何比较字符串,是使用“==”还是使用equals()?
简单的说,==比较字符串是否引用同一地址,而equals()比较值是否相等。除非需要检查两个字符串是否是同一个对象,否则应该总是使用equals()方法。
(1) 使用==判断字符串请注意以下五种情况:
String s1 = "abc";String s2 = "abc";System.out.println(s1 == s2); // true
  Java对字符串常量提供了缓冲区,缓冲区内的字符串是可以被共享的。
String s1 = new String("abc");String s2 = new String("abc");System.out.println(s1 == s2);  // false

  使用构造器创建的字符串都是在缓冲区外面建一个新的。

String s1 = "abc";String s2 = "a";String s3 = "bc";String s4 = s2 + s3;System.out.println(s1 == s4); // false

  Java中字符串的相加其内部是使用StringBuilder类的append()方法和toString()方法来实现的. 而StringBuilder类toString()方法返回的字符串是通过构造函数创建的.

String s1 = "abc";String s2 = "a" + "bc";System.out.println(s1 == s2); // true
   其实这里的s2并没有进行字符串相加, 两个双引号形式的字符串常量相加, 在编译的时候直接会被转为一个字符串"abc".
String str = "abc";str.substring(3);str.concat("123");System.out.println(str == "abc"); // true

  由于字符串是常量(内存中创建对象后不能修改), 该类中所有方法都不会改变字符串的值. 如果希望使用一个可变的字符串, 可以使用StringBuilder或StringBuffer类.

(2) Java判断字符串是否为空有三种方法:
a. 使用的人最多,直观方便,但是效率低。

if (str == null || str.equals(""))

b. 比较字符串的长度,效率高

if (str == null || str.length() == 0)
c. Java SE 6.0才开始使用,效率和b才不多
if (str == null || str.isEmpty())
2. 
为什么为在处理私密信息的时候,选择char [ ]比String好?

String是不可改变的。这意味着一旦String对象被创建,那个地址上的值将保持不变,直到垃圾收集器有空来做自动清理。而使用char[ ]可以(在用完后)明确地修改它的元素。这种一来,私密信息(例如密码)就不会在系统的任何地方出现。

3. 我们可以在switch语句中用String作分支条件吗?
从JDK 7开始是可以的。我们可以使用String符串作为Switch条件。第JDK 6之前,我们不能使用String作为Switch条件。
4. 如何转换String为int?

int n = Integer.parseInt("10");
5. 如何用空白符分割字符串?

可以简单地使用正则表达式做分割。“\s"代表所有空格符,如""、 " \ "、 " \ r"、" \ n "。

String[] strArray = aString.split("\\s+");
6. Substring() 具体干了些什么?

在JDK 6中,substring() 提供了一个显示已有字符串char[]的接口,但不创建新字符串。如果需要创建一个新的char[]表示的字符串,可以像下面一样与一个空字符串相加:

str.substring(m, n) + "";

这样会创建一个新的字符数组,表示新的字符串。示例方法有时可以使代码运行更快,因为垃圾收集器可以收集未使用的大字符串只保留子串。

在Oracle JDK 7中 ,substring()会创建一个新的字符数组而不是使用现有的。
7. String vs StringBuilder vs StringBuffer

String 与StringBuilder的区别:StringBuilder的是可变的,这意味着可以在创建以后再作修改。

StringBuilder与StringBuffer的区别: StringBuffer的是同步的,这意味着它是线程安全的,但速度比StringBuilder慢。
8. 如何重复一个字符串?
在Java中,我们可以使用Apache公共语言包(Apache Commons Lang package)中的repeat()。

String str ="abcd";String repeated = StringUtils.repeat(str,3); //abcdabcdabcd
9. 如何转换字符串为日期?

String str ="Sep 17, 2013";Date date = null;try {  date =new SimpleDateFormat("MMMM d, yy", Locale.ENGLISH).parse(str);} catch (ParseException e) {  e.printStackTrace();}System.out.println(date); // Tue Sep 17 00:00:00 CST 2013
10. 如何统计某字符在一个字符串中的出现次数?
使用apache公共语言包中的StringUtils:

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

转载于:https://my.oschina.net/liangbo/blog/225696

你可能感兴趣的文章
Rainbond 5.0.4版本发布-做最好用的云应用操作系统
查看>>
Java判断是否为垃圾_Java GC如何判断对象是否为垃圾
查看>>
多项式前k项和java_多项式朴素贝叶斯softmax改变
查看>>
OracleLinux安装说明
查看>>
标准与扩展ACL 、 命名ACL 、 总结和答疑
查看>>
使用@media实现IE hack的方法
查看>>
oracle体系结构
查看>>
Microsoft Exchange Server 2010与Office 365混合部署升级到Exchange Server 2016混合部署汇总...
查看>>
【SDN】Openflow协议中对LLDP算法的理解--如何判断非OF区域的存在
查看>>
纯DIV+CSS简单实现Tab选项卡左右切换效果
查看>>
Centos7同时运行多个Tomcat
查看>>
使用CocoaPods过程中的几个问题
查看>>
Pinpoint跨节点统计失败
查看>>
机房带宽暴涨问题分析及解决方法
查看>>
XP 安装ORACLE
查看>>
八、 vSphere 6.7 U1(八):分布式交换机配置(vMotion迁移网段)
查看>>
[转载] 中华典故故事(孙刚)——19 万岁
查看>>
php5编译安装常见错误和解决办法集锦
查看>>
Unable to determine local host from URL REPOSITORY_URL=http://
查看>>
ORACLE配置,修改tnsnames.ora文件实例
查看>>