gpt4 book ai didi

java - 如何将文件名分为基本名和扩展名

转载 作者:行者123 更新时间:2023-11-30 02:56:01 25 4
gpt4 key购买 nike

所以我试图将文件名拆分为基本名和扩展名。我发现this回答这个问题,但我有另一个条件,这个答案没有回答。我需要添加两个条件:

1. 如果文件以“.”开头并且没有任何其他句点,那么它就像第一个句点是文件名的一部分一样,并且没有扩展名(扩展名是“”)。答案在上面的链接

fileName.split("\\.(?=[^\\.]+$)")

将返回给定文件名“.Myfile”

["",MyFile"]

但我希望它返回的是

[.MyFile,""]

有什么方法可以使用正则表达式(更改条件)来做到这一点吗?

2. 我需要 2 个单元格,无论文件名是什么。如果文件名是“README”,那么我仍然希望创建两个单元格,第二个单元格应该包含一个空字符。

我想要:

[README,""]

待退回。

这可能吗?

编辑:已解决!感谢 Wiktor Stribiżew 的帮助,我解决了这个问题。我把它改为

String fileName;
String[] splitedName
String pat = "((?!^)\\.(?=[^.]*$|(?<=^\\.[^.]{0,1000})$))|$";
fileName = "README.txt"
System.out.println(Arrays.toString(fileName .split(pat,2)));
fileName = ".README"
System.out.println(Arrays.toString(fileName .split(pat,2)));
fileName = "README"

结果

"README.txt" => [REAADME,txt]
".README" => [REAADME, ]
"README" => [REAADME, ]

如我所愿。

最佳答案

最终解决方案:

String pat = "(?!^)\\.(?=[^.]*$)|(?<=^\\.[^.]{0,1000})$|$";

该模式包含 3 种分割方式:

  • (?!^)\\.(?=[^.]*$) - 用不是字符串中第一个字符 ( (?!^) ) 且除 . 之外包含 0+ 个字符的点进行分割到它的右侧直到字符串结尾 (``)
  • (?<=^\\.[^.]{0,1000})$) - 如果字符串以文字 . 开头,则在字符串末尾分割并且有0到1000个字符(也许设置为1,256就足够了,但有更长的文件名,请相应调整)
  • $ - 在字符串末尾分割(如果不需要 \\z 如果字符串以 \n 结尾,则替换为 \n )

当您通过2时作为 split 的限制参数方法,您可以将分割数量限制为两次,请参阅 Java demo :

System.out.println(Arrays.toString(".MyFile".split(pat,2)));            // [.MyFile, ]
System.out.println(Arrays.toString("MyFile.ext".split(pat,2))); // [MyFile, ext]
System.out.println(Arrays.toString("Another.MyFile.ext".split(pat,2))); // [Another.MyFile, ext]
System.out.println(Arrays.toString("MyFile.".split(pat,2))); // [MyFile, ]
System.out.println(Arrays.toString("MyFile".split(pat,2))); // [MyFile, ]

原始答案

我相信你正在寻找

(?!^)\\.(?=[^.]*$)|(?<=^\\.[^.]{0,1000})$

注意一点:可与 split 一起使用的模式使用约束宽度后行,假定文件的长度不能超过 1000。根据需要增加该值。

请参阅IDEONE demo :

String pat = "(?!^)\\.(?=[^.]*$)|(?<=^\\.[^.]{0,1000})$";
String s = ".MyFile";
System.out.println(Arrays.toString(s.split(pat,-1)));
s = "MyFile.ext";
System.out.println(Arrays.toString(s.split(pat,-1)));
s = "Another.MyFile.ext";
System.out.println(Arrays.toString(s.split(pat,-1)));
s = "MyFile.";
System.out.println(Arrays.toString(s.split(pat,-1)));

结果:

".MyFile"            => [.MyFile, ]
"MyFile.ext" => [MyFile, ext]
"Another.MyFile.ext" => [Another.MyFile, ext]
"MyFile." => [MyFile, ]

关于java - 如何将文件名分为基本名和扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37192739/

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