Esta es mi propia versión, limpiar desde http://pastebin.com/aZngu65y (publicado en el comentario). Puede ocuparse de Unicode. Limpiará todos los espacios excesivos (incluso en el presupuesto); esto puede ser bueno o malo dependiendo de la necesidad. No hay soporte para la cita escapada.
private static String[] parse(String param) {
String[] output;
param = param.replaceAll("\"", " \" ").trim();
String[] fragments = param.split("\\s+");
int curr = 0;
boolean matched = fragments[curr].matches("[^\"]*");
if (matched) curr++;
for (int i = 1; i < fragments.length; i++) {
if (!matched)
fragments[curr] = fragments[curr] + " " + fragments[i];
if (!fragments[curr].matches("(\"[^\"]*\"|[^\"]*)"))
matched = false;
else {
matched = true;
if (fragments[curr].matches("\"[^\"]*\""))
fragments[curr] = fragments[curr].substring(1, fragments[curr].length() - 1).trim();
if (fragments[curr].length() != 0)
curr++;
if (i + 1 < fragments.length)
fragments[curr] = fragments[i + 1];
}
}
if (matched) {
return Arrays.copyOf(fragments, curr);
}
return null; // Parameter failure (double-quotes do not match up properly).
}
de entrada de muestra para la comparación:
"sdfskjf" sdfjkhsd "hfrif ehref" "fksdfj sdkfj fkdsjf" sdf sfssd
asjdhj sdf ffhj "fdsf fsdjh"
日本語 中文 "Tiếng Việt" "English"
dsfsd
sdf " s dfs fsd f " sd f fs df fdssf "日本語 中文"
"" "" ""
" sdfsfds " "f fsdf
(segunda línea está vacía, tercera línea es espacios, última línea es incorrecto). Por favor juzgue con su propio resultado esperado, ya que puede variar, pero la línea de base es eso, el primer caso debería devolver [sdfskjf, sdfjkhsd, hfrif ehref, fksdfj sdkfj fkdsjf, sdf, sfssd].
Probablemente necesite dividir primero las comillas entrecomilladas, luego dividir el resto de la cadena por espacios en blanco. Debe haber algunas preguntas aquí acerca de cómo hacer el primer paso. El segundo paso es trivial. – jahroy
¿Y qué has intentado? –
Una decente biblioteca de analizadores CSV funcionaría bien para usted. La mayoría permitirá la selección del delimitador y respetará y evitará dividir el texto entre comillas. –