我有这个输出[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("],["," ");
答案 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".