2

我有一个属性文件

{Content}
com.some.that.file.txt = com.some.dest
com.fold.cust.dir = com.some.dest

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

我已经用“/”替换了点,但是这样我不能保留文件名,例如 file.txt 变成了 file/txt。

4

1 回答 1

6

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

String filename = value.replaceAll("\\.(?=.*\\.)", "/");

此正则表达式匹配点,但前提是匹配点之后的某处还有另一个点,使用“前瞻”检查,它具有语法(?=regex)

这是一个测试:

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

输出:

com/some/that/file.txt

编辑:

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

String dirname = filename.replaceAll("/(?!.*/).*", "");

或在一行中:

String dirname = value.replaceAll("\\.(?=.*\\.)", "/").replaceAll("/(?!.*/).*", "");

这个额外的步骤使用具有语法的“负前瞻”(?!regex)来匹配斜线,仅当匹配的斜线之后的某处没有斜线时,然后正则表达式匹配之后使用的所有内容.*

于 2012-06-01T12:40:13.873 回答