Groovy删除路径的开始

时间:2018-09-05 20:33:28

标签: java groovy replace escaping

我正在尝试删除其中包含“ \”和“”的路径的开头。我似乎在角色3遇到一些说逃脱角色的问题。 例:    SomePath:C:\ Users \ ADMINISTRATOR \ App Play \ blah \ blah

SomePath.replaceFirst('C:\\Users\\ADMINISTRATOR\\App Play\\', '');

路径应为“ blah \ blah”

我尝试过:

SomePath.replaceFirst("C:\Users\ADMINISTRATOR\App Play\", "");
SomePath.replaceFirst("C:\\Users\\ADMINISTRATOR\\App Play\\", "");
SomePath.replaceFirst("C:\\\\Users\\\\ADMINISTRATOR\\\\App Play\\\\", "");

SomePath.replaceAll("C:\Users\ADMINISTRATOR\App Play\", "");
SomePath.replaceAll("C:\\Users\\ADMINISTRATOR\\App Play\\", "");
SomePath.replaceAll("C:\\\\Users\\\\ADMINISTRATOR\\\\App Play\\\\", "");

2 个答案:

答案 0 :(得分:2)

尝试一下...带有四个反斜杠的示例对我有用:

def somePath = "C:\\Users\\ADMINISTRATOR\\App Play\\blah\\blah"
println somePath
somePath.replaceFirst("C:\\\\Users\\\\ADMINISTRATOR\\\\App Play\\\\", "");

问题在于字符串需要一个转义的\,并且由于replaceFirst使用了正则表达式,因此regexp引擎需要另一个\来转义\。结果是四个反斜杠。

顺便说一句:您可以使用字符串操作来获取路径,但是您也可以尝试这样的文件操作:

def root= new File("C:\\Users\\ADMINISTRATOR\\App Play\\")
def full= new File("C:\\Users\\ADMINISTRATOR\\App Play\\blah\\blah")
def relPath = root.toPath().relativize( full.toPath() ).toFile()
println relPath

(摘自https://gist.github.com/ysb33r/5804364

答案 1 :(得分:1)

您可以不同地解决此问题。您可以使用\作为分隔符来标记输入路径,然后选择最后2个元素(blahblah)或跳过前4个元素(C:,{ {1}},UsersADMINISTRATOR)。这取决于哪个假设更容易为您推论。考虑以下示例:

App Play
如果只想从初始路径中仅 个最后两个部分,则

第一个选项会更好。如果您可以期望像def somePath = 'C:\\Users\\ADMINISTRATOR\\App Play\\blah\\blah' // Build a new path by accepting the last 2 parts of the initial path assert 'blah\\blah' == somePath.tokenize('\\')[-2..-1].join('\\') // Build a new path by skipping the first 4 parts from initial path assert 'blah\\blah' == somePath.tokenize('\\').drop(4).join('\\') 这样的最终路径,则第二种方法会更好,因为您不知道初始路径包含多少个嵌套子代,并且您想在blah\blah\blahhhh之后立即开始构建新路径。