Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将路径用点表示的字符串转换为文件名_Java_String_File - Fatal编程技术网

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是的-有一个模式:见我答案底部的“编辑”部分