所以我正在尝试将文件名拆分为基础及其扩展名。我找到this这个问题的答案,但我有另一个条件,这个答案没有回答。我有两个条件需要补充:
1。如果文件以“。”开头。并且没有任何其他时间段,那么它就像第一个句点是文件名的一部分,并且没有扩展名(扩展名为“”)。 上面链接中的答案
fileName.split("\\.(?=[^\\.]+$)")
将返回给定的文件名“.Myfile”
["",MyFile"]
但我希望它返回的是
[.MyFile,""]
有没有办法使用正则表达式(改变条件)?
2。无论文件名是什么,我都需要2个单元格。如果文件名是“ README ”,那么我仍然希望创建两个单元格,第二个单元格应该包含一个空字符。
我想:
[README,""]
将被退回。
这可能吗?
编辑:已解决! 感谢WiktorStribiż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, ]
我想要的。
答案 0 :(得分:2)
String pat = "(?!^)\\.(?=[^.]*$)|(?<=^\\.[^.]{0,1000})$|$";
该模式包含3个可拆分的替代方案:
(?!^)\\.(?=[^.]*$)
- 用一个不是字符串中第一个字符的点((?!^)
)拆分,并且在其右边的.
以外有0+个字符,直到string end(``)(?<=^\\.[^.]{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
一起使用的模式使用约束宽度的lookbehind,假定文件的长度不能超过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, ]
答案 1 :(得分:0)
您可以使用拆分将文件名转换为数组,然后遍历数组并查找&#34;之后的所有内容。&#34;
以下是一些示例代码。
String str = "cat.txt";
char[] cArray = str.toCharArray();
然后遍历数组并找到&#34;。&#34;并捕捉它之后的一切。