Answers:
split()
接受正则表达式,因此您需要转义.
以免将其视为正则表达式元字符。这是一个例子:
String[] fn = filename.split("\\.");
return fn[0];
拆分使用正则表达式,其中“。” 是一个特殊的字符,表示任何东西。如果您确实希望它与'。'相匹配,则需要对其进行转义。字符:
String[] fn = filename.split("\\.");
(一个“ \”用于转义正则表达式中的“。”,另一个用于转义Java字符串中的第一个)
我也不建议返回fn [0],因为如果您有一个名为的文件something.blabla.txt
,这是一个有效的名称,那么您将不会返回实际的文件名。相反,我认为使用以下方法会更好:
int idx = filename.lastIndexOf('.');
return filename.subString(0, idx);
我在这里仅看到解决方案,但没有对该问题的完整解释,因此我决定发布此答案
您需要了解的一些知识text.split(delim)
。split
方法:
delim
在text
like in a,b,c,,
(其中delimiter是,
)的末尾存在,split
则会首先创建like,["a" "b" "c" "" ""]
但由于在大多数情况下我们实际上并不需要这些尾随的空字符串,因此也会为我们自动删除它们。因此,它创建了另一个没有这些尾随空字符串的数组并将其返回。你还需要知道点.
是特殊字符的正则表达式。它代表任何字符(行分隔符除外,但可以用Pattern.DOTALL
标志更改)。
所以对于像"abc"
我们拆分"."
split
方法这样的字符串
["" "" "" ""]
,这意味着我们将得到空数组[]
(没有元素,甚至没有空字符串),因此我们无法使用,fn[0]
因为没有索引0。
为了解决这个问题,您只需要创建代表点的正则表达式即可。为此,我们需要避免这种情况.
。做到这一点的方法很少,但最简单的方法可能是使用\
(在String中需要编写它,"\\"
因为\
在那儿也很特殊,并且需要\
转义另一个)。
所以解决您的问题可能看起来像
String[] fn = filename.split("\\.");
奖金
您还可以使用其他方式来逃脱该点,例如
split("[.]")
split("\\Q.\\E")
Pattern.LITERAL
标志的适当Pattern实例split(Pattern.quote("."))
并让regex为您转义。split("[.]")
String#split(String)方法使用正则表达式。在正则表达式中,“。” 字符表示“任何字符”。您可以通过转义“。”来避免此行为。
filename.split("\\.");
或告诉split方法在一个字符类处进行分割:
filename.split("[.]");
字符类是字符的集合。你可以写
filename.split("[-.;ld7]");
和文件名将在每个“-”,“。”,“;”,“ l”,“ d”或“ 7”处分开。在字符类中,“。” 不是特殊字符(“元字符”)。
String str="1.2.3";
String[] cats = str.split(Pattern.quote("."));
split
以正则表达式作为参数。因此,您应该通过"\."
而不是"."
因为它"."
是正则表达式中的元字符。