【发布时间】:2012-10-03 08:13:00
【问题描述】:
我已经开始在我的 java 程序中使用 .match(Regex) 方法,但现在我只是使用一个字符串(String regexString = new String("[^a-zA-Z0-9][^a-zA-Z0-9]*"); 是我目前所拥有的,例如)。但是我知道我可以使用实际的正则表达式(Regex pattern = new Regex() & the Pattern class 然后编译它(?)以某种方式)。
在java中使用Regex作为一个类而不仅仅是一个字符串有什么好处吗?我非常习惯于 bash 脚本,并且正则表达式只是最松散意义上的“字符串”,并且没有能力/不需要单独的类,所以我很难看到这里有一个。
【问题讨论】:
-
永远不要写
new String("...");。只需使用"..."代替:String regexString = ".*";。显式创建一个新的String对象是不必要且低效的。 -
无论如何我都不会创建一个对象吗?如果我有几个单独的字符串怎么办?
-
是的,如果您只使用文字,例如
".*",则会创建一个String对象。但是,如果您执行new String(".*"),则会创建第二个String对象,该对象复制文字字符串的内容,这是不必要的。字符串在 Java 中是不可变的。 Java有一个字符串池机制,所以如果你多次使用同一个字符串字面量,只有一个String对象是共享的。