在我的Java应用程序中,我有代码
Paths.get(v_DirBufferdata).resolve(Paths.get(v_DirIndata).relativize(Paths.get(c_FileIndataLocation))).toString();
与
v_DirBufferdata
为"file://workflow/../buffer/"
v_DirIndata
为"/tmp/C4243/indata"
c_FileIndataLocation
为"/tmp/C4243/indata/one_doc/pv.pdf"
我想得到
"file://workflow/../buffer/one_doc/pv.pdf"
。
然而我正在
"file:/workflow/../buffer/one_doc/pv.pdf"
。
获得协议斜杠的一个简单想法是使用正则表达式。但是,我想确保只处理协议错误 - 不是一个名为“file:”的文件夹。
具体来说,“file:/”应替换为“file://”,但如果“file://”已经存在,我不想得到“file:///”。此外,只有在文件字符串的开头,才应替换“file:/”。到目前为止我已经:
"file:/".replaceFirst("^file:/[^/]", "file://")
显然这还不行。我该怎么做?
如果有一个不同的解决方案,不需要正则表达式攻击,我也是开放的。
答案 0 :(得分:1)
使用否定前瞻:
s.replaceFirst("^file:/(?!/)", "file://")
或者只捕获:/
之后的一个字符并在替换中使用$1
:
s.replaceFirst("^file:/([^/])", "file://$1")