【问题标题】:replaceAll - Java全部替换 - Java
【发布时间】:2014-06-17 02:50:15
【问题描述】:

我有这个输出[4,-3],[-3,-1],[2,-4],[-4,1] 这是给我这个输出的代码:

public static String[] arg() throws IOException {
    String prova =getString().replaceAll(" 0","] [");
    String prova1=prova.replaceFirst("0","[");
    String prova2=prova1.replaceAll("%0","]");
    String prova3=prova2.replaceAll(" ",",");
    String prova4=prova3.replaceAll("],["," ");
    System.out.println(prova4);
    String[] strArray = getString().split(" ");

    //System.out.println(Arrays.toString(strArray));
    return strArray;

}

我的问题是我会输出这个 [4,-3] [-3,-1] [2,-4] [-4,1] ,也就是说,一个空格代替这个 @987654325 @。我认为String prova4=prova3.replaceAll("],["," "); 应该这样做,但它会产生几个错误。

这是错误:Unclosed character class near index 2 ],[

【问题讨论】:

标签: java eclipse


【解决方案1】:

使用这个:

String prova4=prova3.replaceAll(","," ");

【讨论】:

  • 您好,您的建议是:[4,-3 -3,-1 2,-4 -4,1]
  • @nonac 查看我的修复答案。
【解决方案2】:

问题在于replaceAll() 需要一个正则表达式模式,而不是字符串文字。 [] 在正则表达式模式中具有特殊含义,它们对字符类进行分组。您可以通过转义 [] 来解决您的问题:

String prova4 = prova3.replaceAll("\\],\\[", " ");

要得到你想要的输出,你只需要替换逗号,而不是括号:

String prova4 = prova3.replaceAll("\\],\\[", "\\] \\[");

【讨论】:

  • 大字符串 prova4 = prova3.replaceAll("\],\[", "\] \[");是解决方案。但是你认为我的代码“漂亮”吗?还是有可能做得更好?
  • 这是一小段代码来判断它的美。我认为这是完全可以接受的代码。
【解决方案3】:

来自Doc

有12个具有特殊含义的字符:反斜杠\、插入符号^、美元符号$、句点或点.、竖线或竖线符号|、问题标记?、星号或星号*、加号+、左括号(、右括号)、左方括号[、左大括号{ , 这些特殊字符通常被称为"metacharacters".

如果您想将这些字符中的任何一个用作正则表达式中的文字,则需要使用反斜杠对其进行转义。

因此你需要尝试什么:\\]

【讨论】:

  • 您建议转义的字符,右方括号,不在您列出的具有特殊含义的字符中(但左方括号是)。
【解决方案4】:

您的解决方案不起作用,因为replaceAll 的第一个参数是正则表达式。字符[] 具有特殊含义,如here 所述:

字符类 [abc] a、b 或 c(简单类) [^abc] 除 a、b 或 c 以外的任何字符(否定) [a-zA-Z] a 到 z 或 A 到 Z,包括(范围) [a-d[m-p]] a 到 d,或 m 到 p:[a-dm-p](并集) [a-z&&[def]] d、e 或 f(交叉点) [a-z&&[^bc]] a 到 z,b 和 c 除外:[ad-z](减法) [a-z&&[^m-p]] a 到 z,而不是 m 到 p:[a-lq-z](减法)

您必须对它们进行转义,以便代码看起来像这样replaceAll("\\],\\[", "] [")。但是我不认为在你的情况下你需要使用replaceAll,因为你可以使用replace(),这将产生更清晰的代码replace("],[", "] [")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 2015-03-06
    • 2016-02-23
    • 1970-01-01
    • 2019-12-19
    相关资源
    最近更新 更多