从转换后的 String 中删除一个字符,该字符可能出现在 String 中,也可能不出现在 String 中

Remove a character from a transformed String which may come or may not come in a String

我正在尝试以不显示方括号和其中的字符“,”的方式修改字符串。逗号字符实际上可能会或可能不会显示在字符串中,但我无法删除它。

public static String removeSquareBracesFromStringForPgNumberValidation(String string) {
        
        StringBuilder str = new StringBuilder(string);
        str.deleteCharAt(0);
        str.deleteCharAt(string.length() - 2);
        try {
            str.toString().replace(",", "");
        } catch (Exception e) {
            e.printStackTrace();
        }

        return str.toString();

这是我正在尝试的代码,如果我将“[5,055]”作为参数传递给此方法,则给出的输出为 5,055。方括号被删除,但逗号保持原样。我的预期输出是 5055。我在 try catch 中添加的逗号代码可能会也可能不会显示在我作为参数传递的字符串中。请帮我实现期望的输出。

str.toString() returns 当前字符串内容。 使用 str.toString().replace(",", "") 可以创建一个没有逗号的新 StringString 是最终的),但您不使用该值。 所以可以直接return str.toString().replace(",", "");

正确。

另一种方法是过滤代表输入字符串中每个字符的 code point 整数流。

我们要为逗号过滤掉 44 个,为左方括号过滤掉 91 个,为右方括号过滤掉 93 个。

final int LEFT = "[".codePointAt( 0 ) ;  // 91.
final int COMMA = ",".codePointAt( 0 ) ;  // 44.
final int RIGHT = "]".codePointAt( 0 ) ;  // 93.
String result = 
    "[5,055]"
    .codePoints()
    .filter( codePoint -> ! ( ( codePoint == LEFT ) || ( codePoint == COMMA ) || ( codePoint == RIGHT ) ) )
    .collect( StringBuilder::new , StringBuilder::appendCodePoint , StringBuilder::append )
    .toString() 
;

看到这个code run live at IdeOne.com

5055