【问题标题】:How to get (split) filenames from string in java?如何从java中的字符串获取(拆分)文件名?
【发布时间】:2014-08-07 09:25:56
【问题描述】:

我有一个包含文件名的字符串,例如:

"file1.txt file2.jpg tricky file name.txt other tricky filenames containing áéíőéáóó.gif"

如何逐个获取文件名? 我正在寻找最安全最彻底的方法,最好是java标准。那里必须有一些正则表达式,我指望你的经验。

编辑:预期结果: “file1.txt”、“file2.jpg”、“棘手文件名.txt”、“其他包含 áéíőéáóó.gif 的棘手文件名”

感谢您的帮助, 西罗

【问题讨论】:

  • 你能告诉你你希望文件名被分割吗?空格可以是文件名的一部分吗?文件是否总是以已知扩展名结尾?
  • 如您所见,空格可以是名称“棘手文件名.txt”和“其他包含 áéíőéáóó.gif 的棘手文件名”的一部分
  • 如果您的文件不一定以某些扩展名结尾并且它们也包含空格,那么这是不可能的。
  • 所有文件都以扩展名结尾?
  • 你不能。您如何区分“棘手的文件名”和“棘手的文件名”? (第一个是三个文件,第二个是一个文件)

标签: java string file


【解决方案1】:

enrico.bacis 建议的正则表达式 (\S.?.\S+)* 如果文件名在“.”之前没有字符,则将不起作用像 .project.

正确的模式是:

(([^ .]+ +)*\S*\.\S+)

你可以试试here

可以提取文件名的 Java 程序如下所示:

String patternStr = "([^ .]+ +)*\\S*\\.\\S+";
String input = "file1.txt .project file2.jpg tricky file name.txt other tricky filenames containing áéíoéáóó.gif";
Pattern pattern = Pattern.compile(patternStr, Pattern.MULTILINE);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {            
    System.out.println(matcher.group());
}

【讨论】:

  • 是的,更好,它涵盖了更多案例。谢谢!
【解决方案2】:

如果你想使用正则表达式,你可以找到所有出现的:

(\S.*?\.\S+)

(你可以测试一下here

【讨论】:

  • 如何在java中使用它? String[] attachmentFiles = attachmentDisplay.split("(\\S.*?\\.\\S+)");不返回正确答案。
  • split 不使用正则表达式,你可以在这里查看如何在java中使用正则表达式:vogella.com/tutorials/JavaRegularExpressions/article.html
  • 他像我一样使用它。示例_TEST.split("\\s+")
  • 看!有用。正确的方法是 String[] attachmentFiles = attachmentDisplay.split("(\\s.*?\\.\\s+)");谢谢。
【解决方案3】:

如果文件名中有空格,它会变得更棘手。

如果您可以假设文件名中没有点 (.),您可以按照建议使用点来查找每个单独的记录。

如果您不能假设文件名中没有点,例如我的 file.new something.txt

在这种情况下,我建议您创建一个可接受的扩展列表,例如.doc、.jpg、.pdf 等

我知道这个列表可能很长,所以并不理想。完成此操作后,您可以查找这些扩展名并假设它之前的内容是有效的文件名。

【讨论】:

    【解决方案4】:
        String txt = "file1.txt file2.jpg tricky file name.txt other tricky filenames containing áéíőéáóó.gif";
        Pattern pattern = Pattern.compile("\\S.*?\\.\\S+"); // Get regex from enrico.bacis
        Matcher matcher = pattern.matcher(txt);
        while (matcher.find()) {
            System.out.println(matcher.group().trim());
        }
    

    【讨论】:

    • 它不会返回“棘手的文件名.txt”,只返回“name.txt”。
    • @Sziro 现在我使用了正则表达式并修复了它:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 2020-02-06
    相关资源
    最近更新 更多