Dea*_*ean 91 java regex string split
我想知道我是否正在.
以正确的方式分割字符串?我的代码是:
String[] fn = filename.split(".");
return fn[0];
Run Code Online (Sandbox Code Playgroud)
我只需要字符串的第一部分,这就是我返回第一项的原因.我问,因为我注意到在API中.
意味着任何角色,所以现在我被卡住了.
Mar*_*amy 164
split()
接受正则表达式,因此您需要转义.
为不将其视为正则表达式元字符.这是一个例子:
String[] fn = filename.split("\\.");
return fn[0];
Run Code Online (Sandbox Code Playgroud)
And*_*anu 16
Split使用正则表达式,其中'.' 是一个特殊的角色意味着什么.如果你真的希望它与''匹配,你需要逃避它.字符:
String[] fn = filename.split("\\.");
Run Code Online (Sandbox Code Playgroud)
(一个'\'在正则表达式中转义'.',另一个转义为转义Java字符串中的第一个)
另外我不建议返回fn [0]因为如果你有一个名为的文件something.blabla.txt
,这是一个有效的名字,你将不会返回实际的文件名.相反,我认为如果你使用它会更好:
int idx = filename.lastIndexOf('.');
return filename.subString(0, idx);
Run Code Online (Sandbox Code Playgroud)
Psh*_*emo 15
我在这里只看到解决方案,但没有对问题的完整解释,所以我决定发布这个答案
你需要了解一些事情text.split(delim)
.split
方法:
delim
存在于text
like in a,b,c,,
(where delimiter is ,
)的末尾,split
则会创建类似的数组,["a" "b" "c" "" ""]
但由于在大多数情况下我们并不真正需要这些尾随的空字符串,因此它也会自动删除它们.所以它创建了另一个没有这些尾随空字符串的数组并返回它.你还需要知道点.
是特殊字符的正则表达式.它表示任何字符(行分隔符除外,但可以使用Pattern.DOTALL
标志更改).
所以对于字符串,"abc"
如果我们拆分"."
split
方法将
["" "" "" ""]
,这意味着我们将得到结果为空数组[]
(没有元素,甚至没有空字符串),所以我们不能使用fn[0]
因为没有索引0.
要解决这个问题,您只需要创建代表点的正则表达式.要做到这一点,我们需要逃避这一点.
.有几种方法可以做到这一点,但最简单的方法可能就是使用\
(在String中需要编写"\\"
因为\
在那里也是特殊的,需要另一个\
进行转义).
所以你的问题的解决方案可能看起来像
String[] fn = filename.split("\\.");
Run Code Online (Sandbox Code Playgroud)
奖金
您还可以使用其他方式来逃避该点
split("[.]")
split("\\Q.\\E")
Pattern.LITERAL
标志的正确Pattern实例split(Pattern.quote("."))
并让正则表达式为您逃脱.f1s*_*1sh 14
String#split(String)方法使用正则表达式.在正则表达式中,"." 字符表示"任何字符".您可以通过转义"."来避免此行为.
filename.split("\\.");
Run Code Online (Sandbox Code Playgroud)
或者告诉split方法在字符类中拆分:
filename.split("[.]");
Run Code Online (Sandbox Code Playgroud)
字符类是字符集合.你可以写
filename.split("[-.;ld7]");
Run Code Online (Sandbox Code Playgroud)
和文件名将在每个" - ",".",";","l","d"或"7"分开.里面的字符类,"." 不是特殊字符("元字符").
由于DOT(.)被认为是一个特殊字符,而String的split方法需要一个正则表达式,你需要这样做 -
String[] fn = filename.split("\\.");
return fn[0];
Run Code Online (Sandbox Code Playgroud)
在java中,需要使用"\"转义特殊字符,但由于"\"也是Java中的特殊字符,因此需要使用另一个"\"再次转义它!
小智 5
String str="1.2.3";
String[] cats = str.split(Pattern.quote("."));
Run Code Online (Sandbox Code Playgroud)