【问题标题】:Convert String with paths denoted with dot into a filename将带有点表示的路径的字符串转换为文件名
【发布时间】:2012-06-06 16:45:52
【问题描述】:

我有一个属性文件

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

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

我已将点替换为“/”,但这样我无法保留文件名,例如 file.txt 变为 file/txt。

【问题讨论】:

  • 那么问题是什么?
  • 您需要替换除最后一个点之外的所有点。
  • 除非文件名包含多个点。

标签: java string file


【解决方案1】:

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),仅当匹配的斜线之后的某处没有斜线并且正则表达式匹配时才匹配斜线之后的一切都使用.*

【讨论】:

  • 是的,它可以工作,但不能识别目录。有什么模式吗?
  • @M.Hussaini 是的 - 有一个模式:请参阅我的答案底部的“已编辑”部分
猜你喜欢
  • 1970-01-01
  • 2019-01-04
  • 2021-09-07
  • 1970-01-01
  • 2020-04-14
  • 2012-11-23
  • 2019-11-10
  • 1970-01-01
  • 2022-10-17
相关资源
最近更新 更多