大家一起和snailren学java-(13)字符串
“好久没有写这个系列了。其实也有在看,不过觉得一些很基本的都写上来没意思。现在打算的是将整本书看完后,最后整合为一篇blog,筛选出一些平时没有注意到的或者更深入的理解”
在写程序中,字符串String的操作是非常多的。在平时用字符串就只用了一部分特性。这次我们来看看关于字符串主要有哪些操作方式。主要从以下几个方面讲解:String本身特性、String格式化输出、正则表达式、扫描输入类Scanner类。
一、String
我们在定义一个String对象的时候,比如String test = "snailren is so handsome".在以前我们就讲过,字符串的内容保存在静态存储区,test对象在堆。因此我们无法对String的内容进行修改。其他的String方法都是新创建的一个String。
在Java中,没有C++中的那种重载运算符(好开心)。仅仅就只有“+”和“+=”进行了重载。这两个重载非常好理解,可以用于String类型的连接。在连接字符串的时候,java编译器在实现的时候新建了一个StringBuilder类,调用该对象的append方法来实现的“+”的效果。
对于String、StringBuffer、StringBilder的选择,可以参考如下:“引用:
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
对于三者使用的总结:1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer”
二、String格式化输出
Java的格式化输出是通过java.util.Formatter类控制的。可以通过format()方法控制输出的格式(System.out.formate),如占用长度,保留位数等等。Fromatter可以接受多个输出目的地,可以讲格式化后的字符串输出到其他地方。
在java的输出类型转换中,可以通过格式化输出进行类型转换。需要注意的第一点是,对于“b”转换,非boolen类型或者Boolen的对象,只要不为空,都为true,包括0。
三、正则表达式
在java中,提供了有限的几种正则表达式工具,如split,relpace,compare等。
在使用时,可以简单的通过String.matches()来对字符串进行简单的正则匹配。split方法可以利用正则表达式来构建分割字符串的标志,同时也能限制匹配的数量。这里我们就不具体讨论如何编写正则表达式。推荐《精通正则表达式》进行学习。
假如我们需要利用一个正则表达式,对多个不同的字符串进行匹配(多次使用匹配规则),那我们最好生成一个正则表达式对象。Pattern类可以编译生成一个正则表达式对象,通过matcher方法,生成一个Matcher对象,用Matcher对象进行操作,就可以有很多方法可以用。比如可以对多行进行批评,通过设置Pattern标记,可以选择不同的匹配模式等等。这里就不细讲了,需要用到的时候再去查资料。
当要用同一个matcher对不同的字符串进行匹配是,通过Matcher.reset()方法可以转换不同的匹配对象,而不用每个匹配对象都生成一个matcher。这样会有一定的性能优化。 四、扫描输入Scanner类
Scanner类的一个特点就是可以接收来自不同的数据源的数据,如File,InputStream,String,Readable对象等等,通过读取数据元,可以按照数据类型读入。如nextInt,next等等。这样就不用我们在读入字符后再自己再判断数据类型。
同样的,我们可以通过设置Scanner的定界符来分隔数据,默认以空白分割,可以通过设置正则表达式来分割。一般在对于数据比较复杂的情况下(如日志文件),通过设置自定义的分割可以方便的提取数据。 最后,提一下,现在基本不用StringTokenizer来进行分词了
大家一起和snailren学java-(13)字符串的更多相关文章
- Java 13 字符串
1 String对象不可变 每一个修改String值的方法 实际上都是创建一个全新的String对象 public class Immutable { public static String upc ...
- Rhythmk 一步一步学 JAVA (13) Spring-2 之Ben懒加载以及生命周期,单例
1.定义Demo类: package com.rhythmk.spring; public class User { public void Init () { System.out.println( ...
- Java-Runoob-高级教程-实例-字符串:13. Java 实例 - 字符串格式化
ylbtech-Java-Runoob-高级教程-实例-字符串:13. Java 实例 - 字符串格式化 1.返回顶部 1. Java 实例 - 字符串格式化 Java 实例 以下实例演示了通过 f ...
- 零基础学Java第四节(字符串相关类)
本篇文章是<零基础学Java>专栏的第四篇文章,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! String 本文章首发于公众号[编程攻略] 在Java中,我们经 ...
- Java 之字符串(7)
什么是 Java 中的字符串 在程序开发中字符串无处不在,如用户登陆时输入的用户名.密码等使用的就是字符串.其实,在前面的章节中我们就已经使用了字符串, 例如我们在控制台中输出的 "Hell ...
- java练习题——字符串
一.动手动脑之String.equals()方法: 判断s1和s2的内容相同s1.equals(s2). 判断s1和s2的地址相同s1 == s2. 二.整理String类的Length().char ...
- 学Java,Java书籍的最佳阅读顺序
疫情以来,好久没出差了,今天出差去趟上海,早上 4 点多就起床了,到机场天都没亮.到登机口离起飞还一小时,趁着等飞机的时间,抓紧码字,把这篇文章收个尾. 今天和大家说说学 Java 的读书路线.路线中 ...
- 测试人员学Java入门指南
目标读者 本指南特别适合有Python基础的同学学习Java入门,对于没有任何编程经验的同学可能会存在困难. 为什么测试人员要学Java 选择Java,应该不错.TesterHome测试论坛知名大佬基 ...
- 零基础学Java第三节(基本输入输出)
本篇文章是<零基础学Java>专栏的第三篇文章,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! 本文章首发于公众号[编程攻略] Java程序的命令行参数 我们可以 ...
- Java入门篇(五)——Java的字符串/String类
前面在举例时有出现过String的例子,当时肯定有一部分朋友不知道这个是做什么用的.其实String类是Java中一个比较特殊的类,字符串即String类,它不是Java的基本数据类型之一,但可以像基 ...
随机推荐
- 使用DocX开源组件,实现动态数据的填充。
1.先解释一下,什么叫做动态数据,动态数据指的是,一条数据的格式固定,但数据的条数不固定. 2.应用环境,在一个表格当中如果,现在表格有三行n列,如果你需要在表格第一行后添加同等规格的一行或n行,应该 ...
- LocalDB:微软的新生代轻量级数据库
什么是LocalDB 随着SQL Server 2012的发布,LocalDB跃入我们的视线,它可以被看做是SQL Server Express的轻量级版本.LocalDB专门为开发人员创建,它非常易 ...
- 使用maven创建Archetype
Archetype原型 也就是说为项目生成一个原型,可以把这个项目发布,其他人就可以直接通过命令构建一个原型项目了. 其实我一开始也是不知道maven还有这个功能的,但是在使用的springside的 ...
- javascript(定时函数)
一setTimeout函数和setInterval函数的语法以及应用 1.setTimeout函数 定义和用法:setTimeout()方法用于在指定的毫秒数后调用函数或计算表达式. 语法:setTi ...
- <记录学习>京东页面最后一天HTML以及css遇到的问题
遇到的问题及新的知识 1.< >表示< >号2.rgba(0,0,0,透明度) opacity:0~1:3.<a href="javascript:voi ...
- treeview bootstrap 多级下拉树
bootstrap-treeview.js1是一款强大的树菜单插件,本文演示bootstrap-treeview.js15种不同的调用方法.它可一次性加载数据,也可异步加载.支持Checkbox,se ...
- JavaScriptOO.com – 快速找到你需要的 JS 框架
JavaScriptOO.com 集合了目前 Web 开发中最常用的422(截至目前)款 JavaScript 框架,你可以根据功能类别(Ajax,动画,图表,游戏等)进行过滤和排序,快速找到你需要的 ...
- JS判断是否是数字
function isNumber(value) { var patrn = /^[0-9]*$/; if (patrn.exec(value) == null || value == "& ...
- DropDownList
DropDownList 1,DataValueField获取或设置为各列表项提供值的数据源字段 绑定的是唯一的标识 比如是id列 使用SelectedValue获取绑定的数据使用的前端看不到的数据类 ...
- Web前端面试笔试题总结
最近一段时间要毕业了,忙着找工作,见过不少笔试面试题,自己总结了一些加上网上找的一些整合了一下.答案暂时都东拼西凑出来了,但是还是先不发出来,一方面是答案并不是唯一的并且自己的答案不能保证对,另一方面 ...