Как удалить некоторые символы из моей строки - PullRequest
12 голосов
/ 13 декабря 2010

я хочу удалить все следующие символы из моей строки

"> [], -"

на данный момент я делаю это. но должен быть более эффективный способ

newString = myString.replace(">","").replace("[","").replace("]","")....

Ответы [ 7 ]

13 голосов
/ 13 декабря 2010

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

newString = myString.replaceAll("[<>\\[\\],-]", "");

(отредактировано: я не думаю, что на самом деле <> должны быть экранированы. И я забыл удвоить обратную косую черту, поскольку они будут интерпретироваться дважды: один раз компилятором Java, а затем регулярным выражением двигатель.)

7 голосов
/ 13 декабря 2010

Вы можете использовать метод replaceAll класса String.

Вы можете сформировать класс символов, состоящий из символов, которые вы хотите удалить. И заменяющая строка будет пустой строкой "".

Но символы, которые вы хотите удалить и которые будете помещать в класс символов, могут быть метасимволами регулярных выражений и, следовательно, должны быть экранированы Вы можете вручную избежать их, как показывают многие ответы, или вы можете использовать метод Pattern.quote().

String charToDel = ">[],-";
String pat = "[" + Pattern.quote(charToDel) + "]";
String str = "a>b[c]d,e-f";
str = str.replaceAll(pat,"");

Смотри

3 голосов
/ 13 декабря 2010

Более эффективная производительность: да.Вы не можете "удалить" символы из строки, поэтому вы все равно не сможете создать новый.Рассмотрим решение на основе коммутатора / случая:

StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
  switch(s.getCharAt(i)) {
    case '>':
    case '[':
    case ']':
    case ',':
    case '-': break;
    default: sb.append(s.getCharAt(i));
  }
}
s = sb.toString();
2 голосов
/ 13 декабря 2010

При использовании методов replace / replaceAll каждый раз создается новый шаблон. Поэтому, если вы делаете это несколько раз, я настоятельно рекомендую либо перебирать символы, либо создавать одно регулярное выражение для многократного использования.

1 голос
/ 13 декабря 2010
newString = myString.replaceAll("[>\\[\\],-]", "");
1 голос
/ 13 декабря 2010
newString = myString.replaceAll("[>\\[\\],-]", "");

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

0 голосов
/ 13 декабря 2010

Вы можете перебирать каждый символ, добавляя их одного за другим в StringBuilder (), если они не совпадают с одним из символов, которые вы удаляете.быстрее.

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