У меня есть массивный текстовый файл, который я должен вручную разобрать. Другого пути нет, но перебирать его.Java: Замените пробелы в строке с другим символом пробела?
Я захватываю каждую из строк в файле и .split (""), чтобы получить отдельные компоненты - некоторые из них - массивы int, другие - массивы char, а некоторые другие - текстовые строки.
Текстовые строки вызывают у меня головную боль, потому что иногда у них есть место.
Пример линии что-то вроде:
String strLine = "Identifier {2 4 \"#0# == \\\"This String\\\"\" 12 21 6}
Когда я делаю следующее:
String[] strParts = strLine.split(" ");
Полученный вывод является массив строк, который имеет значения строка:
Identifier,{2,4,"#0#,==,\"This,String\"",12,21,6}
Мне нужен выход:
Identifier,{2,4,"#0# == \"This String\"",12,21,6}
Так что я обдумываю, есть ли другой символ пробела, который я могу применить к строкам внутри кавычек до выполнения split().
Кто-нибудь знает об одном?
Я также рассмотрело погружение в RegEx, но я не работал с RegEx достаточно, чтобы быть в состоянии сформулировать логику вокруг раскола правильно -. Разделить на пространстве, если это пространство не находится между первой и последней цитатой»
Thx.
[Update]
Я добавляю это здесь, потому что форматирование кода в ответах не является оптимальным.
String strLine = "Identifier {2 4 \"#0# == \\\"This String\\\"\" 12 21 6}";
String delim = "§"; //use the Section Sign as a delimeter
StringBuilder sb = new StringBuilder();
//first part
sb.append(new String(strLine.substring(0,strLine.indexOf("\""))));
//middle part
sb.append(new String(strLine.substring(strLine.indexOf("\""),strLine.lastIndexOf("\""))).replace(" ", delim));
//last part
sb.append(new String(strLine.substring(strLine.lastIndexOf("\""))));
//make array
String[] parts = sb.toString().split(" ");
Мне нужно будет заменить эти символы делиметра позже, но по крайней мере он делает то, что мне нужно сейчас.
Спасибо всем за предложения, это была их комбинация, которая в конечном итоге решила это для меня.
Не понимаю, что вам нужно, не могли бы вы добавить, что будет результат для этой линии после раскола или, что линия должна стала перед расколом. –
Я думаю, что традиционная 'for'-loop над всем персонажем и следящим образом или не вы в кавычной строке также должна работать. (В основном 'for (...) {if (currentChar == '"') insideQuotedString =! InsideQuotedString; else {if (insideQuotedString)/* добавить в строковый литерал */else/* неупорядоченные данные * /} '. можно найти на https://stackoverflow.com/questions/7804335/split-string-on-spaces-in-java-except-if-between-quotes-ie-treat-hello-wor или https: // stackoverflow .com/questions/7212276/parsing-quoted-text-in-java –
Спасибо за ответы. Я отредактировал свое оригинальное сообщение с более подробной информацией о текущем выходе и нужный вывод. Итерация на уровне персонажа произошла со мной, может быть неизвестным количеством «String in the String», поэтому мне нужно будет отслеживать каждый уровень кавычек, чтобы иметь дело только с внешними цитатами и оставить остальное как есть. – Bandolier2k