将带有用dot表示的路径的String转换为文件名

M.H*_*ini 2 java string file

我有一个属性文件

{Content}
com.some.that.file.txt = com.some.dest
com.fold.cust.dir = com.some.dest
Run Code Online (Sandbox Code Playgroud)

其中key表示要复制到{Value} = com.some.dest的目录的名称

我用"/"替换了点,但是这个我不能保留文件名,例如file.txt变成文件/ txt.

Boh*_*ian 6

使用String.replaceAll(regex, replacement)正确的正则表达式:

String filename = value.replaceAll("\\.(?=.*\\.)", "/");
Run Code Online (Sandbox Code Playgroud)

这个正则表达式匹配点,但只有在匹配点之后的某个地方有另一个点时,使用具有语法的"向前看"进行检查(?=regex).

这是一个测试:

public static void main(String[] args) {
    String value = "com.some.that.file.txt";
    String filename = value.replaceAll("\\.(?=.*\\.)", "/");
    System.out.println(filename);
}
Run Code Online (Sandbox Code Playgroud)

输出:

com/some/that/file.txt
Run Code Online (Sandbox Code Playgroud)

编辑:

要查找目录名称,请使用以下命令:

String dirname = filename.replaceAll("/(?!.*/).*", "");
Run Code Online (Sandbox Code Playgroud)

或者在一行中:

String dirname = value.replaceAll("\\.(?=.*\\.)", "/").replaceAll("/(?!.*/).*", "");
Run Code Online (Sandbox Code Playgroud)

这个额外的步骤使用"负提前看",里面有语法(?!regex),只有在那里匹配斜线匹配斜线后斜线的地方,然后用正则表达式后匹配一切.*