使用Java / Groovy替换字符串中的反斜杠

时间:2011-06-16 19:15:31

标签: java string groovy

尝试使用Groovy脚本获取简单的字符串替换。尝试了各种各样的事情,包括以各种方式逃避字符串,但无法弄明白。

String file ="C:\\Test\\Test1\\Test2\\Test3\\"
String afile = file.toString() println
"original string: " + afile
afile.replace("\\\\", "/")
afile.replaceAll("\\\\", "/") println
"replaced string: " + afile

此代码导致:

original string: C:\Test\Test1\Test2\Test3\
replaced string: C:\Test\Test1\Test2\Test3\

----------------------------

由Sorrow启发的答案看起来像这样:

  // first, replace backslashes
  String afile = file.toString().replaceAll("\\\\", "/")
  // then, convert backslash to forward slash
  String fixed = afile.replaceAll("//", "/")  

7 个答案:

答案 0 :(得分:6)

replace返回不同的字符串。在Java String中无法修改,因此您需要将替换结果分配给某些内容,并将其打印出来。

String other = afile.replaceAll("\\\\", "/")
println "replaced string: " + other

编辑:正如Neftas在评论中指出的那样,\是正则表达式中的特殊字符,因此必须两次转义。

答案 1 :(得分:2)

在Groovy中,你甚至不能写\\ - 它是一个不受支持的转义序列"。所以,我在这里看到的所有答案都是错误的。

如果你的意思是反斜杠,你应该写\\\\。因此,将反斜杠更改为普通斜线将如下所示:

scriptPath = scriptPath.replaceAll("\\\\", "/")

如果你想替换对反斜杠,你应该加倍努力:

scriptPath = scriptPath.replaceAll("\\\\\\\\", "/")

这些行已成功用于我刚才有意推出的Gradle / Groovy脚本 - 只是为了确定。

更有趣的是,展示这些必要的八个反斜杠" \\\\\\\\#34;在StackOverflow上的普通文本中,我必须使用其中的十六个!对不起,我不会告诉你这16个,因为我需要32个!它永远不会结束......

答案 2 :(得分:1)

1)afile.replace(...)不会修改你正在调用它的字符串,它只返回一个新字符串。

2)从Java的角度来看,输入字符串(String file =“C:\\ Test \\ Test1 \\ Test2 \ Test3 \\”;)只包含单个反斜杠。第一个反斜杠是转义字符,然后第二个反斜杠告诉它你实际上想要一个反斜杠。

所以

afile.replace("\\\\", "/");
afile.replaceAll("\\\\", "/");

应该是......

afile = afile.replace("\\", "/");
afile = afile.replaceAll("\\", "/");

答案 3 :(得分:1)

如果您正在使用路径,那么最好使用java.io.File对象。它会自动将给定路径转换为正确的操作系统相关路径。

例如,(在Windows上):

String path = "C:\\Test\\Test1\\Test2\\Test3\\";

// Prints C:\Test\Test1\Test2\Test3
System.out.println(new File(path).getAbsolutePath());

path = "/Test/Test1/Test2/Test3/";

// Prints C:\Test\Test1\Test2\Test3
System.out.println(new File(path).getAbsolutePath());

答案 4 :(得分:0)

String Object是不可变的,因此如果在字符串对象上调用一个修改它的方法。它将始终返回一个新的字符串对象(已修改)。因此,您需要将replaceAll()方法返回的结果存储到String对象中。

答案 5 :(得分:0)

在Groovy中,你也可以用这种方式使用正则表达式:

afile = afile.replaceAll(/(\\)/, "/")
println("replaced string: "+ afile)

注意(如Sorrow所说)replaceAll返回结果,不修改字符串。因此,您需要在打印前分配给var。

答案 6 :(得分:0)

如找到here,最佳候选人可能是static Matcher方法:

Matcher.quoteReplacement( ... )

根据我的实验,这会使单个反斜杠加倍。尽管有方法名称......尽管有一点点神秘的Javadoc:"斜杠(' \')和美元符号(' $')将没有特别含义& #34;