Как удалить недопустимые символы из строки?

Я понятия не имею, как удалить недопустимые символы из строки в Java. Я пытаюсь удалить все символы, которые не являются цифрами, буквами или () [ ] . Как я могу это сделать?

Спасибо

8 ответов

Решение
String foo = "this is a thing with & in it";
foo = foo.replaceAll("[^A-Za-z0-9()\\[\\]]", "");

Javadocs твой друг. Регулярные выражения также ваш друг.

Редактировать:

Это как сиад, это только для латинского алфавита; Вы можете настроить соответственно. \\w может быть использован для a-zA-Z обозначать символ "слово", если это работает для вашего случая, хотя оно включает в себя _,

Использование Guava, и почти наверняка более эффективно (и более читабельно), чем регулярные выражения:

CharMatcher desired = CharMatcher.JAVA_DIGIT
  .or(CharMatcher.JAVA_LETTER)
  .or(CharMatcher.anyOf("()[]"))
  .precomputed(); // optional, may improve performance, YMMV
return desired.retainFrom(string);

Попробуй это:

String s = "123abc&^%[]()";
s = s.replaceAll("[^A-Za-z0-9()\\[\\]]", "");
System.out.println(s);

Выше будут удалены символы "&^%" в строке образца, оставляя в s только "123abc[]()",

public static void main(String[] args) {
    String c = "hjdg$h&jk8^i0ssh6+/?:().,+-#";
    System.out.println(c);
    Pattern pt = Pattern.compile("[^a-zA-Z0-9/?:().,'+/-]");
    Matcher match = pt.matcher(c);
    if (!match.matches()) {
        c = c.replaceAll(pt.pattern(), "");
    }
    System.out.println(c);
}

myString.replaceAll("[^\\w\\[\\]\\(\\)]", "");
Метод replaceAll принимает регулярное выражение в качестве первого параметра и заменяет все совпадения в строке. Это регулярное выражение соответствует всем символам, которые не являются цифрами, буквами или подчеркиванием (\\w) и брекеты, которые вам нужны (\\[\\]\\(\\)])

Вы можете удалить специальные символы из вашего String/Url или любых параметров запроса, которые вы получаете со стороны пользователя

  public static String removeSpecialCharacters(String inputString){
        final String[] metaCharacters = {"../","\\..","\\~","~/","~"};
        String outputString="";
        for (int i = 0 ; i < metaCharacters.length ; i++){
            if(inputString.contains(metaCharacters[i])){
                outputString = inputString.replace(metaCharacters[i],"");
                inputString = outputString;
            }else{
                outputString = inputString;
            }
        }
        return outputString;
   }

Используйте этот код:

String s = "Test[]"
s = s.replaceAll("[");
s = s.replaceAll("]");

Вы можете указать диапазон символов для сохранения/удаления в зависимости от порядка символов в таблице ASCII . Регулярное выражение может использовать фактические символы или шестнадцатеричные коды символов:

      // Example - remove characters outside of the range of "space to tilde".
// 1) using characters
someString.replaceAll("[^ -~]", "");

// 2) using hex codes for "space" and "tilde"
someString.replaceAll("[^\\u0020-\\u007E]", "");
Другие вопросы по тегам