我想知道正则表达式的概念是否仅适用于Java中的String类型,或者也可以应用于数值。例如:
从大于x的整数列表中查找所有整数 少于y
- 的整数列表中查找所有整数
从大于x
从小于(x-10)的整数列表中查找所有整数
这个概念是否也存在于数值中,但是没有用Java实现,还是实现数值太难了?
据我所知,正则表达式适用于涉及搜索的任何地方(无论价值类型如何)。
正如答案和评论中所建议的那样,Java 8的Stream
在功能上完成了我正在寻找的东西(通过过滤器等),但我的问题主要是在{{3}中缺少短手形式对于数值;例如,如果> x 作为模式存在,本来就更容易。
答案 0 :(得分:4)
正则表达式与finite-state machine在同一个系列中,其想法是您拥有所有已知字符的字母表,以及通过表达式本身表示捕获状态的能力。
例如,表达式Colorado License Plate Number [A-Z]{3}-\d{3}
可以捕获许多内容,但它需要字符串“Colorado License Plate Number”才能成为该状态的一部分。是的,空间包括在内。
您所代表的表达方式没有任何特定于州的信息;也就是说,他们专门检查布尔响应。
从大于x但小于y
的整数列表中查找所有整数i
的元素,找到x < i < y
从大于x
的整数列表中查找所有整数i
的元素,找到i > x
......等等。
这些更好地表示为predicates。 Google Guava有an entire class专用于它们,Java 8中的lambdas可以在流中替换它们。
所以,是的,正则表达式实际上只适用于字符串。如果你想要一个更复杂的FSM,那么可以写一个,但不能使用你的本地正则表达式引擎。
答案 1 :(得分:1)
正则表达式是一种专门应用于字符串的概念(这不是特定于Java的)。
听起来你想要的是谓词,它是一个接受值并返回true或false的函数,因此可用于过滤对象集合。 Java 8流支持这种过滤,Groovy可以将过滤器应用于Java集合(实际上任何可迭代的)。