В настоящее время я работаю над небольшой программой, которая:Java: Заменить строку (в квадратных скобках!)
- читает документ Excel (.xlsx, используя SmartXLS) и сохраняет содержимое в длинных строках (а новая строка для каждой ячейки)
- Читает файл конфигурации, а затем преобразует подстроки в длинную строку (replaceAll) и/или добавляет префикс в соответствии с примерами в файле конфигурации
- Выводит финальную строку в файл txt
Exa mpl для преобразования: a b c (с вкладкой между каждой из частей), например. "Его [] скобка" -> "itsabracket" с
в конфигурационном файле ("[]" заменяется на "а"). a - тег, который сообщает мне, какие столбцы преобразуются, b - исходная подстрока, а c - строка, в которую необходимо преобразовать строку b.
Проблема: я уже знаю, что скобки (круглые, курчавые и квадратные) будут использоваться в файле конфигурации, но я не знаю, если это будет всего лишь одна или даже более длинные фразы (с буквами, цифрами, ...) между скобками.
String s = s.replaceAll(convert[i].original, convert[i].new);
для «[]» -> «а» пишет [а] в выходной файл, и если я делаю следующее первое, когда он читает конфигурационный файл и сохраняет все в массиве «преобразования», это бросает PatternSyntaxException ("незамкнутый класс символов рядом с индексом 0"):
if(ss.contains("[")) {
ss = ss.replaceAll("[", "\\[");
} else if(ss.contains("]")) {
ss = s.replaceAll("]", "\\]");
}
с
if(ss.contains("\\[")) {
ss = ss.replaceAll("\\[", "\\\\[");
} else if(ss.contains("\\]")) {
ss = s.replaceAll("\\]", "\\\\]");
}
выводит "[а]" снова.
Любые идеи, как я могу это сделать?
Чтобы соответствовать '[' в регулярном выражении вам нужно написать '\\\\ [' Обратите внимание, что вы можете иметь как '[' и '' 'в строке. –
@PeterLawrey Вы уверены? – Pshemo
Ваши конверсии - они должны быть регулярными выражениями или буквами? Если последнее, почему бы не использовать метод 'String.replace', а не' String.replaceAll'? – RealSkeptic