Мне нужно вычеркнуть несколько недопустимых символов из строки и написать следующую часть кода библиотеки StringUtil:
public static String removeBlockedCharacters(String data) {
if (data==null) {
return data;
}
return data.replaceAll("(?i)[<|>|\u003C|\u003E]", "");
}
У меня есть тестовый файл invalidCharacter.txt с одной строкой в нем:
hello \u003c here < and > there
Я запускаю следующий модульный тест:
@Test
public void testBlockedCharactersRemoval() throws IOException{
checkEquals(StringUtil.removeBlockedCharacters("a < b > c\u003e\u003E\u003c\u003C"), "a b c");
log.info("Procesing from string directly: " + StringUtil.removeBlockedCharacters("hello \u003c here < and > there"));
log.info("Procesing from file to string: " + StringUtil.removeBlockedCharacters(FileUtils.readFileToString(new File("src/test/resources/illegalCharacters.txt"))));
}
Я получаю:
INFO - 2010-09-14 13:37:36,111 - TestStringUtil.testBlockedCharactersRemoval(36) | Procesing from string directly: hello here and there
INFO - 2010-09-14 13:37:36,126 - TestStringUtil.testBlockedCharactersRemoval(37) | Procesing from file to string: hello \u003c here and there
Я ОЧЕНЬ растерялся: как видите, код правильно удаляется«<», «>» и «\ u003c», если я пропущу строку, содержащую эти значения, но она не удалит «\ u003c», если я прочту из файла, содержащего ту же строку.
Мои вопросы, чтобы я перестала терять волосы, это:
- Почему я получаю такое поведение?
- Как я могу изменить свой код для правильного удаления \ u003c во всех случаях?
Спасибо