Nun zuerst würde ich empfehlen, innere doppelte Anführungszeichen, e. G. Wert 1, Wert 2, "Wert 3," Wert 4, Wert 5 ", Wert 6. Mit dieser Art von Syntax ist eine Methode, die ich für diesen Zweck verwende, unten. Es ist ein wenig komplexer als der erste Vorschlag, weil Leerzeichen und Zeilenumbrüche zwischen einem Komma und dem nächsten Element in der Liste ignoriert werden.
public static String[] splitSet(String inStr, char delimiter) {
if (inStr == null)
return null;
if (inStr.isEmpty())
return new String[]{};
/*
* add an empty element here and remove it at the end to simplify
* algorithm
*/
String delimiterStr = String.valueOf(delimiter);
String parseStr = inStr + delimiterStr + " ";
/*
* prepare parsing.
*/
Vector<String> list = new Vector<>();
String element = "";
int lc = 0;
char b = ' ';
char c;
boolean inBetweenQuotes = false;
/*
* parsing loop.
*/
while (lc < parseStr.length()) {
c = parseStr.charAt(lc);
/*
* add current entry and all following empty entries to list vector.
* Ignore space and new line characters following the delimiter.
*/
if ((c == delimiter) && !inBetweenQuotes) {
// flag to avoid adding empty elements for delimiter being blank
// or new line
boolean added = false;
while ((lc < parseStr.length())
&& ((c == delimiter) || (c == ' ') || (c == '\n'))) {
if ((c == delimiter)
&& !(added && ((c == ' ') || (c == '\n')))) {
list.add((String) UFormatter.parseElement(element,
DataType.STRING, delimiterStr));
element = "";
added = true;
}
lc++;
if (lc < parseStr.length())
c = parseStr.charAt(lc);
if (lc > 0)
b = parseStr.charAt(lc - 1);
}
}
/*
* add character to tmpList. Close String literal or Vector literal
*/
else {
element = element + c;
// toggle inBetweenQuotes at not escaped '"'
if ((c == '"') && (b != '\\'))
inBetweenQuotes = !inBetweenQuotes;
lc++;
b = c;
}
}
if (!element.isEmpty() && inBetweenQuotes)
list.add(element.substring(0, element.length() - 1) + "\"");
else if (!element.isEmpty())
list.add(element.substring(0, element.length() - 1));
// put Vector to array.
String[] ret = new String[list.size()];
for (int i = 0; i < list.size(); i++)
ret[i] = list.elementAt(i);
return ret;
}
eine CSV-Parser Bibliothek Versuchen wie einer der [hier] aufgelisteten (https://stackoverflow.com/questions/22137343/java-csv-parser-comparisons). – cxw
Wie CXW sagt: Erfinde das Rad nicht neu. Glauben Sie uns, bauen Sie Ihren ** eigenen ** CSV-Parser und bekommen Sie das ** richtig ** ist ein ** wichtiger ** Stück Arbeit. – GhostCat
Wenn man sich diesen Eingang ansieht, ist nicht klar, was die gewünschte Ausgabe ist. Bitte angeben. –