简体   繁体   中英

Alternative of Java String.split for better performance

In the process of adding data by import from a csv/tab seperated file, my code consumes a lot of time to upload data. Is there any alternative to do this in a more faster way ?? This is the code i use to split fields in an array.

 //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;
}

I would recommend you to take a look at opencsv library or try CSVParser from Apache Commons

Anyway, reinventing the wheel is not the best idea. Using 3rd party library would be less headache than writing it yourself :)

Use a CSV parser like super-csv .

Univocity provides a benchmark of CSV parsers . It says that univocity-parsers is fast, which is no surprise. You could give it a try.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM