replaceAll - Java

时间:2014-04-30 16:57:17

标签: java eclipse

我有这个输出[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]就是一个空格代替这个{{ 1}}。我认为],[应该这样做,但它会产生一些错误。

这是错误:String prova4=prova3.replaceAll("],["," ");

4 个答案:

答案 0 :(得分:1)

使用它:

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

答案 1 :(得分:1)

问题是replaceAll()期望正则表达式模式,而不是字符串文字。 []在正则表达式模式中具有特殊含义,它们对字符类进行分组。您可以通过转发[]

来解决您的问题
String prova4 = prova3.replaceAll("\\],\\[", " ");

要获得所需的输出,您只需要替换逗号而不是括号:

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

答案 2 :(得分:1)

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

Character classes
[abc]           a, b, or c (simple class)
[^abc]          Any character except a, b, or c (negation)
[a-zA-Z]        a through z or A through Z, inclusive (range)
[a-d[m-p]]      a through d, or m through p: [a-dm-p] (union)
[a-z&&[def]]    d, e, or f (intersection)
[a-z&&[^bc]]    a through z, except for b and c: [ad-z] (subtraction)
[a-z&&[^m-p]]   a through z, and not m through p: [a-lq-z](subtraction)

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

答案 3 :(得分:0)

来自Doc

有12个字符具有特殊含义:反斜杠\,插入符^,美元符号$,句点或点.,垂直条或竖线符号|,问号?,星号或星号*,加号+,左括号(,右括号{{ 1}}和开头方括号),开口大括号[,这些特殊字符通常称为{

如果要在正则表达式中使用任何这些字符作为文字,则需要使用反斜杠转义它们。

因此您需要尝试使用:"metacharacters".