6

我已经开始.match(Regex)在我的 java 程序中使用该方法,但现在我只使用一个字符串(String regexString = new String("[^a-zA-Z0-9][^a-zA-Z0-9]*");这是我到目前为止所拥有的,例如)。但是我知道我可以使用实际的正则表达式(Regex pattern = new Regex() & the Pattern class然后以某种方式编译它(?))。

在java中使用Regex作为一个类而不仅仅是一个字符串有优势吗?我非常习惯于 bash 脚本,并且正则表达式只是最松散意义上的“字符串”,并且没有能力/不需要单独的类,所以我很难看到这里有一个。

4

2 回答 2

7

我会做你认为最简单和最清楚的事情。

Pattern当正则表达式的性能至关重要时,通常使用A。如果您还没有分析您的应用程序并且它已被证明是一个问题,那么使用纯文本String可能会很好。

于 2012-10-03T08:16:01.627 回答
0

您尝试用于匹配目的的正则表达式必须在一个有限状态机中进行转换,该状态机接受与您提供的模式匹配的任何文本。

因此,每次使用正则表达式时,例如在 (new String("").split("") 表达式中,都会在后台构造一个模式,即有限状态机,它接收您的字符串并尝试匹配输入。

如果你有一个经常使用的正则表达式并且速度是一个真正的问题,那么保持有限状态机而不是每次都构建它是一个重要的加速。您可以通过在不同输出字符串上连续调用 match 之间存储 Pattern 对象来做到这一点。

以下内容应提供更多见解:http ://en.wikipedia.org/wiki/Finite-state_machine

于 2012-10-03T08:49:33.903 回答