网站首页 > java教程 正文
好程序员Java教程分享Java中String类型的10个问题
1. 如何比较两个字符串?用“=”还是equals
简单来说,“==”是用来检测俩引用是不是指向内存中的同一个对象,而equals()方法则检测的是两个对象的值是否相等。只要你想检测俩字符串是不是相等的,你就必须得用equals()方法。
如果你知道“字符串保留(string intern)”的概念那就更好了。
2. 为什么安全敏感的字符串信息用char[]会比String对象更好?
String对象是不可变的就意味着直到垃圾回收器过来清扫之前它们都不会发生变化的。用数组的话,就可以很明确的修改它任何位置的字符元素。这样的话,如密码等安全敏感的信息就不会出现在系统的任何地方。
3. 字符串对象能否用在switch表达式中?
从JDK7开始的话,我们就可以在switch条件表达式中使用字符串了,也就是说7之前的版本是不可以的。
1<span class="hljs-comment" style="color: rgb(153, 153, 136);">// java 7 only!</span>
2<span class="hljs-keyword" style="font-weight: bold;">switch</span> (str.toLowerCase()) {
3 <span class="hljs-keyword" style="font-weight: bold;">case</span> <spanclass="hljs-string" style="color: rgb(221, 17, 68);">"a"</span>:
4 <span class="hljs-keyword" style="font-weight: bold;">value</span> = <spanclass="hljs-number" style="color: rgb(0, 128, 128);">1</span>;
5 <span class="hljs-keyword" style="font-weight: bold;">break</span>;
6 <span class="hljs-keyword" style="font-weight: bold;">case</span> <spanclass="hljs-string" style="color: rgb(221, 17, 68);">"b"</span>:
7 <span class="hljs-keyword" style="font-weight: bold;">value</span> = <spanclass="hljs-number" style="color: rgb(0, 128, 128);">2</span>;
8 <span class="hljs-keyword" style="font-weight: bold;">break</span>;
9}
4. 如何将字符串转换为整型数值?
1<span class="hljs-keyword" style="font-weight: bold;">int</span> n = Integer.parseInt(<span class="hljs-string" style="color: rgb(221, 17, 68);">"10"</span>);
如此简单,经常使用有偶尔也会被遗忘。
5. 如何用空格去分隔字符串?
我们可以很便捷的使用正则表达式来进行分隔。“\s”就表示空格,还有如””,”\t”,”\r”,”\n”.
1<span class="hljs-type" style="color: rgb(68, 85, 136); font-weight: bold;">String</span>[] strArray = aString.<span class="hljs-built_in"style="color: rgb(0, 134, 179);">split</span>(<span class="hljs-string"style="color: rgb(221, 17, 68);">"\\s+"</span>);
6. substring()方法具体是都干了些啥?
在JDK6中,这个方法只会在标识现有字符串的字符数组上 给一个窗口来表示结果字符串,但是不会创建一个新的字符串对象。如果需要创建个新字符串对象,可以这样在结果后面+一个空的字符串:
1str.substring(m, n) + <span class="hljs-string" style="color: rgb(221, 17, 68);">""</span>
这么写的话就会创建一个新的字符数组来表示结果字符串。同时,这么写也有一定的几率让你的代码跑的更快,因为垃圾回收器会吧没有在使用的大字符串回收而留下子字符串。
Oracle JDK7中的substring()方法会创建一个新的字符数组,而不用之前存在的。看看这张图就会明白substring()方法在JDK6和JDK7中的区别。
7. String&StringBuilder&StringBuffer
String vs StringBuilder:StringBuilder是可变的,这就意味你在创建对象之后还可以去修改它的值。StringBuilder vs StringBuffer:StringBuffer是同步的,意味着它是线程安全的,但是就会比StringBuilder慢些。
8. 如何快速重复构造一段字符串?
在Python编程中,只需要用字符串去乘以一个数字就可以 搞定了,那在Java编程中,我们可以使用来自Apache Commons Lang包中的StringUtils类的repeat()方法。
1<span class="hljs-built_in" style="color: rgb(0, 134, 179);">String</span> str = <span class="hljs-string" style="color: rgb(221, 17, 68);">"abcd"</span>;
2<span class="hljs-built_in" style="color: rgb(0, 134, 179);">String</span> repeated = StringUtils.repeat(str,<span class="hljs-number" style="color: rgb(0, 128, 128);">3</span>);
3<span class="hljs-comment" style="color: rgb(153, 153, 136);">//abcdabcdabcd</span>
9. 如何将时间格式的字符串转换成date对象?
1<span class="hljs-built_in" style="color: rgb(0, 134, 179);">String</span> str = <span class="hljs-string" style="color: rgb(221, 17, 68);">"Sep 17, 2013"</span>;
2<span class="hljs-built_in" style="color: rgb(0, 134, 179);">Date</span> date = <span class="hljs-keyword" style="font-weight: bold;">new</span> SimpleDateFormat(<span class="hljs-string" style="color: rgb(221, 17, 68);">"MMMM d, yy"</span>, Locale.ENGLISH).parse(str);
3System.out.println(date);
4<span class="hljs-comment" style="color: rgb(153, 153, 136);">//Tue Sep 17 00:00:00 EDT 2013</span>
10. 如何计数一个字符在某个字符串中出现的次数?
使用Apache Commons Lang包中的 StringUtils类就可以完成这个工作。
1<span class="hljs-keyword" style="font-weight: bold;">int</span> n = StringUtils.countMatches(<span class="hljs-string" style="color: rgb(221, 17, 68);">"11112222"</span>, <span class="hljs-string" style="color: rgb(221, 17, 68);">"1"</span>);
2System.out.printl<span class="hljs-string" style="color: rgb(221, 17, 68);">``</span><span class="hljs-string" style="color: rgb(221, 17, 68);">` n(n);</span>
猜你喜欢
- 2024-10-16 python字符串1_2(Python字符串转数字)
- 2024-10-16 Java 中 String 字符串可以有多长?65535?
- 2024-10-16 多学习才能多赚钱之:java判断字符是否是字母
- 2024-10-16 Java枚举深度解读,看这篇就够了(java枚举如何使用)
- 2024-10-16 注意:Java程序员容易犯的10大低级错误
- 2024-10-16 《Java语言程序设计》期末考试模拟试题——判断题和问答题
- 2024-10-16 好程序员Java学习路线分享Java基础之string
- 2024-10-16 五种js判断是否为整数类型方式(js怎么判断一个数是不是整数)
- 2024-10-16 「Java基础知识」Java中的字符串是什么
- 2024-10-16 简谈Java中“String类”的特点(java中的string的运用)
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)