java.util.regex.PatternSyntaxException: незакрытый символьный класс рядом с индексом 0

#java

#java

Вопрос:

Я пытаюсь заменить все квадратные скобки в моей строке.

Это моя программа

    package com;

import java.util.ArrayList;

import org.apache.commons.lang3.StringUtils;
import org.json.JSONException;

public class Teste {

    /**
     * @param args
     * @throws JSONException 
     */
    public static void main(String[] args) throws JSONException {


        String str = "[Fountain#Apple#Big(7)]";

        str.replaceAll("[", "").replace("]", "");

        System.out.println(str);

    }

}
 

Но я получаю

 Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 0
[
^
    at java.util.regex.Pattern.error(Unknown Source)
    at java.util.regex.Pattern.clazz(Unknown Source)
    at java.util.regex.Pattern.sequence(Unknown Source)
    at java.util.regex.Pattern.expr(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.util.regex.Pattern.<init>(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.lang.String.replaceAll(Unknown Source)
    at com.Teste.main(Teste.java:19)
 

Может кто-нибудь, пожалуйста, скажите мне, как заменить все квадратные скобки??

Ответ №1:

String.replaceAll использует шаблон регулярных выражений, но вам вообще не нужны регулярные выражения. Вы можете использовать:

 str = str.replace("[", "").replace("]", "");
 

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

 str = str.replaceAll("[\[\]]", "");
 

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

Обратите внимание, что вам нужно использовать результат replace (или replaceAll ) — строки неизменяемы в Java, поэтому любые методы, подобные replace не изменяют существующую строку, они возвращают ссылку на новую строку с соответствующими изменениями.