我正在尝试删除其中包含“ \”和“”的路径的开头。我似乎在角色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\\\\", "");
答案 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
答案 1 :(得分:1)
您可以不同地解决此问题。您可以使用\
作为分隔符来标记输入路径,然后选择最后2个元素(blah
和blah
)或跳过前4个元素(C:
,{ {1}},Users
,ADMINISTRATOR
)。这取决于哪个假设更容易为您推论。考虑以下示例:
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
之后立即开始构建新路径。