当前位置: 首页 > 面试题库 >

提供正则表达式时,Java中的String.split()方法到底如何工作?

帅令雪
2023-03-14
问题内容

我正在为OCPJP考试做准备,并且遇到了以下示例:

class Test {
   public static void main(String args[]) {
      String test = "I am preparing for OCPJP";
      String[] tokens = test.split("\\S");
      System.out.println(tokens.length);
   }
}

这段代码显示为16。我期待的是类似no_of_characters +1的内容。有人可以解释一下,在这种情况下split()方法实际上是做什么的?我就是不明白…


问题答案:

"\\S"正则表达式引擎中表示\S非空白字符的每个字符上进行拆分。

因此,让我们尝试分割"x x"非空白(\S)。由于此正则表达式可以用一个字符进行匹配,因此可以对其进行迭代以标记拆分的位置(我们将使用竖线|进行表示)。

  • 'x'一个非空白?是的,让我们标记一下| x
  • ' '一个非空白?不,所以我们保持原样
  • 是最后一个'x'非空白吗?是的,让我们标记一下| |

因此,作为结果,我们需要在开始和结束时拆分字符串,这最初会给我们结果数组

["", " ", ""]
   ^    ^ - here we split

但是由于删除了结尾的 空字符串 ,结果将是

[""," "]     <- result
        ,""] <- removed trailing empty string

因此split返回["", " "]仅包含两个元素的数组。

顺便说一句。要关闭删除最后一个空字符串的操作,您需要使用split(regex,limit)limit的负值,例如split("\\S",-1)

现在回到您的示例。如果您有数据,则将每个

I am preparing for OCPJP
| || ||||||||| ||| |||||

意思是

 ""|" "|""|" "|""|""|""|""|""|""|""|""|" "|""|""|" "|""|""|""|""|""

所以这代表这个数组

[""," ",""," ","","","","","","","",""," ","",""," ","","","","",""]

但是由于""删除了结尾的空字符串(如果它们的存在是由split引起的-
有关更多信息,请访问:混淆String.split的输出)

[""," ",""," ","","","","","","","",""," ","",""," ","","","","",""]  
                                                     ^^ ^^ ^^ ^^ ^^

您得到的结果数组仅包含以下部分:

[""," ",""," ","","","","","","","",""," ","",""," "]

正好是16个元素



 类似资料:
  • 问题内容: 我有一个字符串: 我想在所有运算符上拆分字符串,但将运算符包括在数组中,因此结果数组如下所示: 我目前有这个: 这非常接近,它给出: 我有什么办法使多个字符运算符像我希望的那样出现在数组中? 作为不那么重要的第二个问题,正则表达式中是否有办法从字母周围修剪空格? 问题答案: 这应该做。一切都很好地存储在中。

  • 问题内容: 这个问题已经在这里有了答案 : 字符串替换方法不替换字符 (5个答案) 2年前关闭。 我正在尝试将所有特殊字符替换为“%”,例如: 我的正则表达式是: 在在线工具中*它可以正常运行,但在Java中 弦保持不变。 *我尝试过:http : //www.regexplanet.com/ http://regex101.com/和其他 问题答案: 字符串是不可变的。您忘了将新变量重新分配给:

  • 问题内容: 我想检查一个字符串是否按顺序包含单词“ stores”,“ store”和“ product”,无论它们之间是什么。 我尝试使用;并且; 我是否需要显式声明一个正则表达式并将其传递给方法,还是完全不能传递正则表达式? 问题答案: String.contains 与字符串,句点一起使用。它不适用于正则表达式。它将检查指定的确切字符串是否出现在当前字符串中。 注意不检查单词边界。它只是检查

  • 本文向大家介绍Java正则表达式提取字符的方法实例,包括了Java正则表达式提取字符的方法实例的使用技巧和注意事项,需要的朋友参考一下 正好遇到一个需求需要将字符串中特定的字符全部提取出来,这个如果是按常规的字符串处理的话非常的繁琐。于是想到用正则表达式来完成。项目需求是这样的:需要提取车牌号中最后一个数字,比如说:苏A7865提取5,苏A876X提取6 实现方法: 关于Matcher 中的几个方

  • 我正在尝试使用python中的正则表达式。我构建了正则表达式,如下所示。我知道用于匹配搜索字符串的开头。我已使用包含多个的匹配模式构建框架,但我不确定将如何尝试匹配搜索字符串中的模式。 我预计会引发错误,关于无效的正则表达式,但它不会引发任何错误,也不会返回任何匹配项。 所以,我的问题是或是有效的正则表达式吗?

  • 在以下URL中: null 也就是说,以上与: