出于性能原因,Java String.split 传递预编译的正则表达式

标签 java regex performance

如问题所述,给出以下代码:

public class Foo
{
   public static void main(String[] args)
   {  
         String test = "Cats go meow";  
         String[] tokens = test.split(" ");
   }
}

是否可以按照以下方式在拆分函数中预编译该正则表达式:

public class Foo
{  
   Pattern pattern = Pattern.compile(" ");
   public static void main(String[] args)
   {  
         String test = "Cats go meow";  
         String[] tokens = test.split(pattern);
   }
}

最佳答案

是的,这是可能的。此外,将 pattern 设为静态,以便静态方法 main 可以访问它。

public class Foo
{  
   private static Pattern pattern = Pattern.compile(" ");
   public static void main(String[] args)
   {  
         String test = "Cats go meow";  
         String[] tokens = pattern.split(test);
   }
}

根据docs对于String中的split方法,可以使用String的split或者Pattern的split,但是String的split编译出一个Pattern 并调用它的 split 方法,因此使用 Pattern 预编译正则表达式。

关于出于性能原因,Java String.split 传递预编译的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14901569/

相关文章:

ios - 用于触摸主题标签的 Objective-C 正则表达式

php - 验证 reCAPTCHA key

javascript - 将枚举(作为字符串)从 CAPS_CASE 转换为驼峰式

c# - 为什么 Entity Framework 在 SELECT 上生成 JOIN

php/模板与回显

java - JNA - 读取多个按键

java - 如何将 Immutables 与公共(public)构造函数一起使用但不序列化为元组样式?

java - 如何在 Java 中使用 u' unicode 标记反序列化 JSON?

java - Java中的desktop.open打开.bat文件而不是文件夹

javascript - 为什么这个 JavaScript 程序比 C++ 更快地填充一个大数组?