Wie lassen sich comma separated values (csv) in ein numerisches Array wandeln?
Das Beispiel geht von einem String aus, der aus positiven und negativen numerischen Werten besteht, die durch Kommata getrennt sind. Zur Demonstration eines entsprechenden Fehlerverhaltens sind zudem ein alphanumerischer und ein leerer Wert (zwei aufeinander folgende Kommata) eingetragen.
Durch die Methode String.split()
wird der Werte-String
zunächst in ein String-Array eingelesen. Als Trenner fungiert
hier das Komma. Nach Erzeugen eines gleichgroßen int
-Arrays
wird das String-Array nun in einer Schleife durchlaufen und die
einzelnen Werte zunächst durch die Methode String.trim()
von führenden und nachfolgenden Leerzeichen bereinigt.
In
der Folge wird über einen regulären Ausdruck geprüft,
ob es sich bei dem jeweiligen Wert um eine beliebig große
positive oder negative Zahl handelt.
Ist dies der Fall, so wird
der numerische Wert des Strings der identischen Position im
int-Array zugewiesen. Dies geschieht über die Bildung eines
entsprechenden Integer
-Objektes. Es wird
schließlich in den primitiven int
-Wert gecastet.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class CsvToArray {
private static final String TRENNER = ",";
public static void main(String[] args) {
String s = "14,abc,+68,1024,-109, ,17";
String[] sa = s.split(TRENNER);
int[] ia = new int[sa.length];
for (int i = 0; i < sa.length; i++) {
sa[i] = sa[i].trim();
if (sa[i].matches("[-|+]?[0-9]{1,}")) {
try {
ia[i] = new Integer(sa[i]).intValue();
} catch (NumberFormatException nfe) {
}
}
}
for(int i : ia) {
System.out.println(i);
}
}
}
Obwohl die Verarbeitung von unerlaubten Werten durch den
regulären Ausdruck ausgeschlossen wird, sollte das Casting
durch einen try-catch
-Block abgesichert werden.
Im
Beispiel werden die Positionen des leeren Wertes und des
alphanumerischen Eintrags durch split()
, bzw. durch den
regulären Ausdruck ausgefiltert und führen so zu einer
Leerposition im int
-Array. Sie enthalten nach
Beendigung der Schleife den Standardwert 0.
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.