【问题标题】:Alternative of Java String.split for better performance替代 Java String.split 以获得更好的性能
【发布时间】:2017-04-04 13:42:24
【问题描述】:

在通过从 csv/tab 分隔文件导入添加数据的过程中,我的代码在上传数据时消耗了大量时间。有没有其他方法可以更快地做到这一点?这是我用来拆分数组中的字段的代码。

 //Here -  lineString = fileReader.readLine()

public static String [] splitAndGetFieldNames(String lineString ,String fileType) 
{
    if(lineString==null || lineString.trim().equals("")){
        return null;
    }
    System.out.print("LINEEEE   " +  lineString);
    String pattern = "(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))";
    if(fileType.equals("tab"))
        pattern = "\t" + pattern;
    else
        pattern = "," + pattern;

    String fieldNames[] = lineString.split(pattern);


    for(int i=0 ; i < fieldNames.length ; i++){
        //logger.info("Split Fields::"+fieldNames[i]);
        if (fieldNames[i].startsWith("\""))
            fieldNames[i] = fieldNames[i].substring(1);
        if (fieldNames[i].endsWith("\""))
            fieldNames[i] = fieldNames[i].substring(0, fieldNames[i].length()-1);
        fieldNames[i] = fieldNames[i].replaceAll("\"\"","\"").trim();
        //logger.info("Split Fields after manipulation::"+fieldNames[i]);
    }
    return fieldNames;
}

【问题讨论】:

  • 您是否尝试过使用 CSV 解析器而不是重新发明轮子?它可能比您的代码更优化并更快

标签: java arrays performance api split


【解决方案1】:

使用像 super-csv 这样的 CSV 解析器。

Univocity 提供benchmark of CSV parsers。它说univocity-parsers 很快,这并不奇怪。你可以试试看。

【讨论】:

    【解决方案2】:

    我建议你看看opencsv 库或尝试CSVParser 来自Apache Commons

    无论如何,重新发明轮子并不是最好的主意。使用 3rd 方库比自己编写更容易:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      相关资源
      最近更新 更多