java在捕获的组上应用正则表达式
我不熟悉Java,尤其是regex 我有一个CSV文件,看起来像:
col1,col2,clo3,col4
word1,date1,date2,port1,port2,....some amount of port
word2,date3,date4,
....
我想要的是迭代每一行(我想我将使用SimpleFor循环来完成),然后返回所有端口。
我想我需要的是在两次约会之后把所有的东西都拿出来找
,(\d+),?
和返回的组
我的问题是:
1)可以用一个表达式完成吗?(意思是,不将结果存储在字符串中,然后应用另一个正则表达式)
2)我可以将行上的迭代合并到正则表达式中吗
# 1 楼答案
是的,可以在一行中完成:
这是一条神奇的线:
正则表达式表示“任何具有非数字的术语”,其中“术语”是输入开始/逗号和输入结束/逗号之间的一系列字符
方便的是,
split()
方法不返回尾随的空白项,因此不需要担心第一次替换后留下的任何尾随逗号在java 8中,您可以在一行中完成,但事情要简单得多:
这会将分割的结果以逗号进行流式传输,然后过滤掉非所有数字元素,然后收集结果
一些测试代码:
输出:
java 8中的相同输出用于:
# 2 楼答案
有很多方法可以做到这一点,出于教育目的,我将展示一些方法
我把你的输入放在一个
String
中,仅仅作为例子,你必须正确地阅读它。我还将结果存储在List
中,并在最后打印:使用
Scanner
:使用
String.split
:使用
Pattern
-Matcher
:输出:
如果知道“端口”在文件中的位置,可以使用该信息通过指定位置和获取子字符串来略微提高性能