Есть участок кода:
String[] del = {"\"", "\'", ",", ".", ";", "`", ":", "!", "(", ")", "<", ">", "-", "_"};
for (String delElement : del) {
word = word.replaceAll(delElement, "");
}
При компиляции выкидывает исключение PatternSyntaxException:
Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed group near index 1
(
^
at java.util.regex.Pattern.error(Pattern.java:1955)
at java.util.regex.Pattern.accept(Pattern.java:1813)
at java.util.regex.Pattern.group0(Pattern.java:2908)
at java.util.regex.Pattern.sequence(Pattern.java:2051)
at java.util.regex.Pattern.expr(Pattern.java:1996)
at java.util.regex.Pattern.compile(Pattern.java:1696)
at java.util.regex.Pattern.<init>(Pattern.java:1351)
at java.util.regex.Pattern.compile(Pattern.java:1028)
at java.lang.String.replaceAll(String.java:2223)
at WordCounter.main(WordCounter.java:20)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Как можно исправить?
Так как первым аргументом метод replaceAll
принимает регулярное выражение, то (
воспринимается как спец. символ (как начало группы и т.д.). Поэтому его нужно экранировать. То же самое касается )
. А ещё .
в регулярных выражениях обозначает любой символ, поэтому .replaceAll(".", "")
приводит к пустой строке в качестве результата.
String[] del = { "\"", "\'", ",", "\\.", ";", "`", ":", "!", "\\(", "\\)", "<", ">", "-", "_" };
String word = "abc\"',.;`:!()<>-_def";
for (String delElement : del)
{
word = word.replaceAll(delElement, "");
}
System.out.println(word);
Так как используется рег. выражение, то можно все элементы для исключения объединить в одно выражение, дабы делать всего один replaceAll
. Однако читабельностью такой вариант не особо отличается:
String del = "[\"',\\.;`:!\\(\\)<>\\-_]";
String word = "abc\"',.;`:!()<>-_def";
word = word.replaceAll(del, "");
System.out.println(word);
Попробуйте так:
String[] del = {"\"", "\'", ",", ".", ";", "`", ":", "!", "(", ")", "<", ">", "-", "_"};
for (String delElement : del)
word = word.replaceAll(Pattern.quote(delElement), "");
Виртуальный выделенный сервер (VDS) становится отличным выбором
Здравствуйте, столкнулся с проблемой, что никак не могу заставить исходниками из интернета, которые, как говорят их авторы "работают", заставить...
ЗдравствуйтеИмеются классы унаследованные от Fragment и реализующие интерфейс CursorLoader
Здравствуйте, подскажите пожалуйста есть ли возможность внедрить в меню "Копировать вставить" свой пункт? При нажатие на который мы бы переходили...