2015-07-27 4 views
1

В настоящее время я работаю над небольшой программой, которая: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("\\]", "\\\\]"); 
} 

выводит "[а]" снова.

Любые идеи, как я могу это сделать?

+0

Чтобы соответствовать '[' в регулярном выражении вам нужно написать '\\\\ [' Обратите внимание, что вы можете иметь как '[' и '' 'в строке. –

+0

@PeterLawrey Вы уверены? – Pshemo

+1

Ваши конверсии - они должны быть регулярными выражениями или буквами? Если последнее, почему бы не использовать метод 'String.replace', а не' String.replaceAll'? – RealSkeptic

ответ

2

Использование String.replace Он принимает последовательность символов, в отличие от replaceAll.You не должны использовать управляющие символы для [] и т.д.

String s = s.replace(convert[i].original, convert[i].new); 

вход
его [] []] скобка
тэгом []

выход

itsaa] кронштейн

Надеюсь, это то, чего вы хотите достичь, используя свой код.

+1

Вау, это ... * facepalm * Спасибо, что может использовать неправильный метод ... – Neph

Смежные вопросы