我有一个属性文件
{Content}
com.some.that.file.txt = com.some.dest
com.fold.cust.dir = com.some.dest
其中键表示要复制到 {Value}=com.some.dest 的目录名称
我已经用“/”替换了点,但是这样我不能保留文件名,例如 file.txt 变成了 file/txt。
使用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)
来匹配斜线,仅当匹配的斜线之后的某处没有斜线时,然后正则表达式匹配之后使用的所有内容.*