2017-04-04 7 views
3

Bei dem Hinzufügen von Daten durch den Import aus einer csv/tab-separierten Datei benötigt mein Code viel Zeit, um Daten hochzuladen. Gibt es eine Alternative, um das schneller zu machen? Dies ist der Code, mit dem ich Felder in einem Array aufspalte.Alternative von Java String.split für bessere Leistung

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

Haben Sie versucht, einen CSV-Parser zu verwenden, anstatt das Rad neu zu erfinden? Es kann optimiert und schneller als Ihr Code sein – BackSlash

Antwort

3

Ich würde Ihnen empfehlen, einen Blick auf opencsv Bibliothek zu nehmen oder versuchen CSVParser von Apache Commons

Auf jeden Fall ist das Rad neu zu erfinden nicht die beste Idee. Die Verwendung von 3rd-Party-Bibliothek wäre weniger Kopfschmerzen als das Schreiben selbst :)

Verwandte Themen