当前位置: 首页 > news >正文

大家一起和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来进行分词了

转载于:https://www.cnblogs.com/ren-jie/p/5384633.html

相关文章:

  • 九、搭建织梦cms网站
  • I.MX6 driver goto 使用
  • wcf系列学习5天速成——第四天 wcf之分布式架构
  • 【HBase】start master 与 start master --backup 的区别
  • 【Mongodb】如何创建mongodb的replica set
  • ti processor sdk linux am335x evm /bin/setup-host-check.sh hacking
  • ST:(Lab2)Selenium 实验
  • MySQL中MAX函数与Group By一起使用的注意事项
  • 网易前端JavaScript编码规范
  • BAT面试笔记
  • Architecture.the-reactive-manifesto
  • 一起Polyfill系列:Function.prototype.bind的四个阶段
  • Mybatis 中在传参时,$ 和# 的区别
  • 敏捷方法在测试计划中的应用
  • ARM9学习笔记之——MiniOS
  • ----------
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Android组件 - 收藏集 - 掘金
  • CentOS从零开始部署Nodejs项目
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • JAVA_NIO系列——Channel和Buffer详解
  • Java|序列化异常StreamCorruptedException的解决方法
  • k个最大的数及变种小结
  • mockjs让前端开发独立于后端
  • 代理模式
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • #HarmonyOS:Web组件的使用
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • $refs 、$nextTic、动态组件、name的使用
  • (175)FPGA门控时钟技术
  • (4.10~4.16)
  • (C语言)二分查找 超详细
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (MATLAB)第五章-矩阵运算
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (十一)手动添加用户和文件的特殊权限
  • (算法)求1到1亿间的质数或素数
  • (图)IntelliTrace Tools 跟踪云端程序
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)Unity3DUnity3D在android下调试
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .jks文件(JAVA KeyStore)
  • .Net MVC + EF搭建学生管理系统
  • .net 反编译_.net反编译的相关问题
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • [2016.7 day.5] T2
  • [C++] 如何使用Visual Studio 2022 + QT6创建桌面应用
  • [C++][数据结构][算法]单链式结构的深拷贝
  • [COI2007] Sabor
  • [Flutter]打包IPA
  • [GN] Vue3.2 快速上手 ---- 核心语法2