gpt4 book ai didi

java - 比预期的 Java 正则表达式性能慢

转载 作者:可可西里 更新时间:2023-11-01 12:35:51 28 4
gpt4 key购买 nike

我的任务是读取大型 CSV 文件(超过 300k 条记录)并将正则表达式模式应用于每条记录。我一直是一名 PHP 开发人员,从未真正尝试过任何其他语言,但决定我应该尝试使用 Java 来实现这一点,我认为这会更快。

事实上,在 Java 中逐行读取 CSV 文件的速度要快 3 倍。然而,当我应用正则表达式要求时,事实证明 Java 实现比 PHP 脚本多花费 10-20%。

很可能我在 Java 中做错了什么,因为我今天刚学过这个。下面是两个脚本,任何建议将不胜感激。我真的不想为这个特定项目放弃 Java。

PHP 代码

<?php
$bgtime=time();
$patterns =array(
"/SOME REGEXP/",
"/SOME REGEXP/",
"/SOME REGEXP/",
"/SOME REGEXP/"
);

$fh = fopen('largeCSV.txt','r');
while($currentLineString = fgetcsv($fh, 10000, ","))
{
foreach($patterns AS $pattern)
{
preg_match_all($pattern, $currentLineString[6], $matches);
}
}
fclose($fh);
print "Execution Time: ".(time()-$bgtime);

?>

Java代码

import au.com.bytecode.opencsv.CSVReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.ArrayList;

public class testParser
{
public static void main(String[] args)
{
long start = System.currentTimeMillis();


String[] rawPatterns = {
"SOME REGEXP",
"SOME REGEXP",
"SOME REGEXP",
"SOME REGEXP"
};

ArrayList<Pattern> compiledPatternList = new ArrayList<Pattern>();
for(String patternString : rawPatterns)
{
Pattern compiledPattern = Pattern.compile(patternString);
compiledPatternList.add(compiledPattern);
}


try{
String fileName="largeCSV.txt";
CSVReader reader = new CSVReader(new FileReader(fileName));

String[] header = reader.readNext();
String[] nextLine;
String description;

while( (nextLine = reader.readNext()) != null)
{
description = nextLine[6];
for(Pattern compiledPattern : compiledPatternList)
{
Matcher m = compiledPattern.matcher(description);
while(m.find())
{
//System.out.println(m.group(0));
}
}
}
}

catch(IOException ioe)
{
System.out.println("Blah!");
}

long end = System.currentTimeMillis();

System.out.println("Execution time was "+((end-start)/1000)+" seconds.");
}
}

最佳答案

使用缓冲阅读器可能有助于提高性能:

CSVReader reader = new CSVReader(new BufferedReader(new FileReader(fileName)));

关于java - 比预期的 Java 正则表达式性能慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6656442/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com