string拆分为int

我正在为我工​​作的公司准备正则表达式教程更新。 原始教程创建于2012年,从那时起Java发生了一点变化。 有新的Java语言版本,尽管Java中的正则表达式处理仍不完善(nb。它仍使用非确定性FSA),但仍有一些新功能。 我在上一篇文章中针对新的Java 9方法写过一些文章。 但是这一次,我必须查看自2012年以来的所有新功能。

从1.8开始的splitAsStream

这样,我在java.util.regex.Pattern类中找到了splitAsStream 。 它与方法split几乎相同,除了返回的不是String对象的数组而是流。 最简单的实现是

public Stream<String> splitAsStream(final CharSequence input) {return Arrays.stream(p.split(input));
}

当图书馆试图跟上新风和支持潮流时,我可以看到许多这样的实现。 没有什么比将数组或列表从某些现有功能转换为流更简单了。

但是,解决方案是低于标准,失去了流的本质:仅执行所需的工作。 我的意思是,“应仅在处理流时执行所需的工作”,而不是在开发人员将数组或集合返回方法转换为返回一个流的情况下进行。 流以一种精简的方式及时交付结果。 您会看到我们有多少个懒惰的表情。

JDK实现利用了流的性能优势。 如果您查看源代码,您会立即看到实现比前面提到的简单解决方案稍微复杂一些。 由于我没有时间去研究实现,也许没有兴趣,所以我使用了另一种方法来证明实现尊重流的惰性。

该方法的参数是CharSequence而不是StringCharSequenceString实现的接口,但我们也可以实现它。 为了感觉到这种情况下的流实现多么懒惰,我创建了一个CharSequence实现,它通过调试打印出了方法调用。

class MyCharSequence implements CharSequence {private String me;MyCharSequence(String me) {this.me = me;}@Overridepublic int length() {System.out.println("MCS.length()=" + me.length());return me.length();}@Overridepublic char charAt(int index) {System.out.println("MCS.charAt(" + index + ")=" + me.charAt(index));return me.charAt(index);}@Overridepublic CharSequence subSequence(int start, int end) {System.out.println("MCS.subSequence(" + start + "," + end + ")="+ me.subSequence(start, end));return me.subSequence(start, end);}
}

有了此类,我可以执行以下简单的main方法:

public static void main(String[] args) {Pattern p = Pattern.compile("[,\\.\\-;]");final CharSequence splitIt =new MyCharSequence("one.two-three,four;five;");p.splitAsStream(splitIt).forEach(System.out::println);
}

输出显示该实现确实很懒:

MCS.length()=24
MCS.length()=24
MCS.length()=24
MCS.charAt(0)=o
MCS.charAt(1)=n
MCS.charAt(2)=e
MCS.charAt(3)=.
MCS.subSequence(0,3)=one
one
MCS.length()=24
MCS.charAt(4)=t
MCS.charAt(5)=w
MCS.charAt(6)=o
MCS.charAt(7)=-
MCS.subSequence(4,7)=two
two
MCS.length()=24
MCS.charAt(8)=t
MCS.charAt(9)=h
MCS.charAt(10)=r
MCS.charAt(11)=e
MCS.charAt(12)=e
MCS.charAt(13)=,
MCS.subSequence(8,13)=three
three
MCS.length()=24
MCS.charAt(14)=f
MCS.charAt(15)=o
MCS.charAt(16)=u
MCS.charAt(17)=r
MCS.charAt(18)=;
MCS.subSequence(14,18)=four
four
MCS.length()=24
MCS.charAt(19)=f
MCS.charAt(20)=i
MCS.charAt(21)=v
MCS.charAt(22)=e
MCS.charAt(23)=;
MCS.subSequence(19,23)=five
five
MCS.length()=24

实现继续进行,当它找到流的第一个元素时,将其返回。 我们可以处理字符串“ one”,并且仅当我们返回其他元素时,它才能处理其他字符。 为什么必须在开始时调用方法长度3次? 我不知道。 也许它想非常确定序列的长度不会发生神奇的变化。

士气

这是一个很好的示例,说明如何扩展库以支持流。 如果应用程序只是将集合或数组转换为第一个版本中的流,这不是问题,但是如果分析表明性能可以收回投资,则应实现真正的流惰性。

边注

CharSequence的实现是可变的,但是处理要求它保持恒定,否则结果不确定。 我可以确认。

下周,我将展示splitAsStream的可能用法,该splitAsStream利用的功能是它在字符序列中读取的内容不会超出所需的范围。

翻译自: https://www.javacodegeeks.com/2017/11/split-as-stream.html

string拆分为int

string拆分为int_拆分为流相关推荐

  1. java字节流分为_Java的流操作分为字节流和字符流两种。

    Java的流操作分为字节流和字符流两种.           1. 字节流  所有的读操作都继承自一个公共超类java.io.InputStream类.  所有的写操作都继承自一个公共超类java.i ...

  2. ACMNO.5给出一百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。 90分以上为A 80-89分为B 70-79分为C 60-69分为D 60分以下为E

    题目描述 给出一百分制成绩,要求输出成绩等级'A'.'B'.'C'.'D'.'E'. 90分以上为A 80-89分为B 70-79分为C 60-69分为D 60分以下为E 输入 一个整数0-100以内 ...

  3. java基础语法-day24-25进阶-Arrays工具类String自动装箱自动拆箱

    p576 Arrays工具类 p577 冒泡排序 import java.util.Arrays;public class BubbleSort {/*** 冒泡排序:*/public static ...

  4. java 数据类型分为_JAVA中分为基本数据类型及引用数据类型

    byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值 ...

  5. 造完家怎么拆东西_吸顶灯灯管怎么拆?吸顶灯拆灯管的注意事项有哪些?

    吸顶灯出现故障,检查是因为灯管给坏了,就需要对吸顶灯的灯光进行拆卸,那么,吸顶灯灯管怎么拆?打算将吸顶灯的灯管给拆了的时候,也应该要能够清楚具体拆卸的事宜,保证拆卸效果,吸顶灯拆灯管的注意事项有哪些? ...

  6. 华硕x580nv拆机_看懂一篇拆机贴 拆遍天下机 华硕A45VM拆机清灰换硅脂 怒降25度!...

    本帖最后由 疾影Z7 于 2017-1-11 18:06 编辑 天下龙脉尽出昆仑,同理.拆机的思路大同小异,掌握一台笔记本的拆机技巧便可拆遍天下机.拆机的诀窍是:胆大.心细.掌握好这四字诀面对市场上9 ...

  7. android防拆机方案,拆机狂人必备 iFixit Android客户端试用

    作者:Aimo 相信不少IT产品爱好者都知道iFixit,即使不知道的人在不经意见也会看到过iFixit的作品--iFixit是一家著名的IT产品维修网 站,新IT产品流出之时的第一手拆机资料往往都来 ...

  8. dell灵越笔记本后盖怎么拆_dell笔记本拆机详解【图文教程】

    总所周知,笔记本室友大大小小的配置组装而成的,而笔记本同样的,有时也会存在着或多或少的故障,又或者有时由于好奇心的趋势,让我们相对笔记本内部的相关配置做更深一步的了解,这个时候,我们会选择对笔记本进行 ...

  9. ThinkPad E14拆机,拆无线网卡、蓝牙和摄像头

    1.拆无线网卡和蓝牙 底部(D面)拆开,无线网卡和蓝牙是一体的,把下面的模块拆掉就行了. 2.拆摄像头 在屏幕的一面(B面)边缘撬开,先把线拔掉,摄像头和麦克风是一起的,要一整块拆掉,里面是用双面胶贴 ...

最新文章

  1. 挨踢人生路--记我的10年18家工作经历 - 后记
  2. 实现点击下载文件的几种方法
  3. NYOJ 527 AC_mm玩dota
  4. Django 【补充】ORM多对多正向查询
  5. 鲁迅散文——随感录四十九
  6. Netty HTTP on Android
  7. Redis 再牛逼,也得设置密码
  8. LeetCode 685. 冗余连接 II(并查集)
  9. 指数随机变量 泊松过程跳_如何深刻的理解随机变量
  10. (6)机器学习_支持向量机
  11. maven多层项目配置
  12. 【入门】R语言最详细Windows安装指南
  13. 笔记:常见的约束问题求解算法——乘子法和Frank-Wolfe算法
  14. 图论 二分图 小世界网络 语义网络
  15. your cuda software stack is old.we fall back to the NIVIDIA driver for some compilation. Update your
  16. 个别网站打不开,但是别人能打开,手机能打开
  17. 《枯野抄》--奇妙的人性窥视抄
  18. 我收藏的阿里云盘资源,牛逼!!
  19. ADXL345传感器小结
  20. python绘制五角星

热门文章

  1. P6860-象棋与马【欧拉函数,杜教筛】
  2. jzoj4804-[NOIP2016提高A组模拟9.28]成绩调研【指针,模拟】
  3. codeforces1554 E. You(思维+数学+转化)
  4. F. Paper Grading(Trie树+dfs序+二维数点)
  5. 【dfs】【拓扑排序】组合树
  6. JavaFX图表(四)之面积图
  7. JavaScript常用单词整理总结
  8. java中判断数组中元素出现的次数
  9. 2015蓝桥杯省赛---java---A---8(移动距离)
  10. 向上类型转换VS向下类型转换