以点作为分隔符的拆分字符串

2022-08-31 09:20:23

我想知道我是否要以正确的方式拆分字符串?我的代码是:.

String[] fn = filename.split(".");
return fn[0];

我只需要字符串的第一部分,这就是我返回第一项的原因。我问是因为我注意到API中这意味着任何字符,所以现在我被困住了。.


答案 1

split()接受正则表达式,因此您需要转义才能不将其视为正则表达式元字符。下面是一个示例:.

String[] fn = filename.split("\\."); 
return fn[0];

答案 2

我在这里只看到解决方案,但没有对问题的完整解释,所以我决定发布这个答案

问题

您需要了解一些关于. 方法:text.split(delim)split

  1. 接受作为参数正则表达式(正则表达式),它描述了我们要拆分的分隔符,
  2. 如果存在于 like in 的末尾(其中分隔符是 ),首先会创建数组 like,但由于在大多数情况下,我们并不需要这些尾随的空字符串,因此它也会自动为我们删除它们。因此,它会创建另一个没有这些尾随空字符串的数组并返回它delimtexta,b,c,,,split["a" "b" "c" "" ""]

您还需要知道 dot .正则表达式的特殊字符。它表示任何字符(行分隔符除外,但这可以用标志进行更改)。Pattern.DOTALL

所以对于字符串,如果我们在方法上拆分,就会"abc""."split

  1. 创建数组,如 ,["" "" "" ""]
  2. 但是由于此数组仅包含空字符串,并且它们都尾随,因此将被删除(如上一个第二点所示)

这意味着我们将得到作为结果的空数组(没有元素,甚至没有空字符串),所以我们不能使用,因为没有索引0。[]fn[0]

溶液

要解决此问题,您只需要创建表示点的正则表达式。为此,我们需要逃避它。有几种方法可以做到这一点,但最简单的可能是通过使用(在String中需要写成因为那里也很特殊,需要另一个被转义)。.\"\\"\\

因此,您的问题的解决方案可能看起来像

String[] fn = filename.split("\\.");

奖金

您还可以使用其他方法来转义该点,例如

  • 使用字符类split("[.]")
  • 引号括起来 split("\\Q.\\E")
  • 使用带有标志的正确模式实例Pattern.LITERAL
  • 或者只是使用并让正则表达式为您转义。split(Pattern.quote("."))