Как написать "?", "(" В массив строк Java - PullRequest
0 голосов
/ 11 октября 2019

Мне нужен массив, подобный этому:

String [] x = {",",".",":",";","&","?","!","(",")"};

, но для этих символов он не работает должным образом: ".", "?", "(", ")". Когда я пытаюсь заменить их в строке:

String z = "Hell&o Wor.ld!";

for(int i=0; i<x.length; i++){

if(z.contains(x[i])){

    System.out.println(z.replaceAll(x[i],""));
 }}

, это не работает для этих четырех символов. Как я могу это исправить?

Ответы [ 2 ]

2 голосов
/ 11 октября 2019

replaceAll использует интерпретацию этих символов с помощью регулярных выражений, поэтому вам нужно их избегать. Вам также нужно экранировать обратную косую черту ради синтаксического анализатора строк:

String [] x = {",", "\\.", ":", ";", "&", "\\?", "!", "\\(", "\\)"};

И так как здесь у вас есть экранирующие символы, вам нужно изменить проверку содержимого, чтобы проверять только последний символ в соответствующемстрока:

String z = "Hell&o Wor.ld!";

for(int i=0; i<x.length; i++) {
    if( z.contains( x[i].substring(x[i].length() - 1) )) { // if z contains last char of x
        System.out.println(z.replaceAll(x[i],""));
    }
}
1 голос
/ 11 октября 2019

Причина: String.replaceAll принимает регулярное выражение в качестве первого аргумента, а в грамматике регулярных выражений Java .?() - это специальные символы


  1. Escape их:

    String[] x = {",", "\\.", ":", ";", "&", "\\?", "!", "\\(", "\\)"};
    

    Но условие больше не может работать, вам нужно что-то вроде

    if (z.matches(".*" + x[i] + ".*")) {
    
  2. Использовать String.replace

    System.out.println(z.replace(x[i], ""));
    

-

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...