【发布时间】:2016-07-05 05:32:20
【问题描述】:
我正在编写一个小程序,用于修剪文件名中字符后面的所有内容。这个字符由用户指定,我希望我的正则表达式的一部分适应它。我的计划是在正则表达式查询中使用占位符,但我遇到了一些麻烦,找不到太多关于它的信息。 这是我到目前为止的代码:
//get all files (variablepath is a String passed to the method, so is altSep)
File dir = new File(path);
File[] listOfFiles = dir.listFiles();
String regex = "[\\%s\\(\\)]+[\\w\\s]+";
regex = String.format(regex, altSep);
for (File i : listOfFiles) {
String currName = i.getName();
String newName = currName.replaceAll(regex, "");
newName = path + '\\' + newName;
File newFile = new File(newName);
i.renameTo(newFile);
}
是的,它可以工作,但也会删除空格后面的所有内容。我还担心 %s 可能与用户可能输入的其他字符匹配。在正则表达式中使用占位符是一个好主意吗? (而且我还在学习 Java,所以你可能会发现其他一些可以更容易解决的问题)
旁注:字符本身也必须删除,因为这涉及文件名,扩展名必须保持不变。
【问题讨论】:
-
为什么不
String newName = currName.substring(0, currName.indexOf(character)+1)? -
@Grogi 注意如果java版本
-
@Grogi 我意识到我在描述问题时不够具体。您的解决方案很棒,但我还需要摆脱给定的角色本身。我编辑了我的问题。
-
未转义的正则表达式是
[\%s\(\)]+[\w\s]+。这是正确的吗?请注意这里%不需要转义。 -
@ccf 正确。那是未转义的版本。我删除了
%处的转义符,但不幸的是它仍然删除了空格而不是所需的字符
标签: java regex placeholder