Java 将路径用点表示的字符串转换为文件名
我有一个属性文件Java 将路径用点表示的字符串转换为文件名,java,string,file,Java,String,File,我有一个属性文件 {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 filename = value.replaceAll("\\.(?=.*\\.)", "/"); 此正则表
{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 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)
,如果匹配的斜杠后面没有斜杠,则只匹配斜杠,然后正则表达式使用*
匹配后面的所有内容,那么问题是什么?您需要替换除最后一个点以外的所有内容。除非文件名包含多个点。是的,它可以工作,但不能识别目录。有什么模式吗?@M.Hussaini是的-有一个模式:见我答案底部的“编辑”部分