gpt4 book ai didi

java - 在 Java 中使用文件名和扩展名清理字符串

转载 作者:搜寻专家 更新时间:2023-11-01 02:03:12 24 4
gpt4 key购买 nike

有这四种类型的文件名:

  1. 带双扩展名的文件名
  2. 没有扩展名的文件名
  3. 文件名以点结尾,没有扩展名
  4. 具有专有名称的文件名。

像这样:

String doubleexsension = "doubleexsension.pdf.pdf";
String noextension = "noextension";
String nameWithDot = "nameWithDot.";
String properName = "properName.pdf";

String extension = "pdf";

我的目标是清理所有类型并仅正确输出 filename.filetype。为了发表这篇文章,我做了一个愚蠢的脚本:

ArrayList<String> app = new ArrayList<String>();
app.add(doubleexsension);
app.add(properName);
app.add(noextension);
app.add(nameWithDot);

System.out.println("------------");

for(String i : app) {

// Ends with .
if (i.endsWith(".")) {
String m = i + extension;
System.out.println(m);
break;
}

// Double extension
String p = i.replaceAll("(\\.\\w+)\\1+$", "$1");
System.out.println(p);
}

这个输出:

------------
doubleexsension.pdf
properName.pdf
noextension
nameWithDot.pdf

我不知道如何处理 noextension 。我该怎么做?当没有扩展名时,它应该采用 extension 值并将其附加到末尾的字符串。

我想要的输出是:

------------
doubleexsension.pdf
properName.pdf
noextension.pdf
nameWithDot.pdf

提前致谢。

最佳答案

您可以为正则表达式添加替代项以匹配各种场景:

(?:(\.\w+)\1*|\.|([^.]))$

并替换为 $2.pdf。查看regex demo .

编辑:如果可以复制的扩展是已知的,您可以通过交替组使用白名单方法:

(?:(\.(?:pdf|gif|jpe?g))\1*|\.|([^.]))$

再看一个regex demo .

详细信息:

  • (?: - 分组开始,字符串 anchor 的 $ 结尾应用于下面的所有替代项(它们必须在字符串结尾)
    • (\.\w+)\1* - 重复(或不重复)扩展名(. + 1+ 字字符重复零次或多次)(使用白名单方法,只会考虑指定的扩展名 - (?:pdf|gif|jpe?g) 将只匹配 pdf, gif , jpeg, jpg 等(如果添加了更多替代方案)
    • | - 或者
    • \. - 一个点
    • | - 或者
    • ([^.]) - 不是捕获到第 2 组的点的任何字符
  • ) - 外分组结束
  • $ - 字符串结尾。

参见 Java demo :

List<String> strs = Arrays.asList("doubleexsension.pdf.pdf","noextension","nameWithDot.","properName.pdf");
for (String str : strs)
System.out.println(str.replaceAll("(?:(\\.\\w+)\\1*|\\.|([^.]))$", "$2.pdf"));

关于java - 在 Java 中使用文件名和扩展名清理字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40529136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com