【问题标题】:Java String Split() MethodJava 字符串拆分() 方法
【发布时间】:2015-02-03 17:19:35
【问题描述】:

我想知道下面这行会做什么:

String parts = inputLine.split("\\s+");

这会简单地在行中的任何空格处拆分字符串吗?我认为这是一个正则表达式,但我以前从未见过它们。

【问题讨论】:

  • 你自己试过了吗?
  • 这会导致类型不匹配,因为String#split 返回一个String[] 而不仅仅是一个String

标签: java regex


【解决方案1】:

是的,documentation states split 将正则表达式作为参数。

在正则表达式中\s 代表character class 包含空格字符如:

  • 标签\t,
  • 空间" ",
  • 行分隔符\n\r
  • 更多...

+quantifier,可以读作“一次或多次”,这使得 \s+ 表示由一个或多个空格构建的文本。

我们需要将此正则表达式写为"\\s+(带有两个反斜杠),因为在字符串中\ 被认为是需要转义(带有另一个反斜杠)以产生\ 文字的特殊字符。

所以split("\\s+") 将生成由一个或多个空格分隔的标记数组。顺便说一句,删除了尾随的空元素,因此 "a b c ".split("\\s+") 将返回数组 ["a", "b", "c"] 而不是 ["a", "b", "c", ""]

【讨论】:

    【解决方案2】:

    是的,尽管实际上 任意数量 个空格元字符(包括制表符、换行符等)。请参阅Java documentation on Patterns

    【讨论】:

      【解决方案3】:

      它将字符串拆分为一个(或多个)连续的空白字符。 Pattern Javadoc 将预定义字符类(\s 是其中之一)描述为,

      预定义的字符类

      .     Any character (may or may not match line terminators)
      \d    A digit: [0-9]
      \D    A non-digit: [^0-9]
      \s    A whitespace character: [ \t\n\x0B\f\r]
      \S    A non-whitespace character: [^\s]
      \w    A word character: [a-zA-Z_0-9]
      \W    A non-word character: [^\w]
      

      请注意,\\ 是根据需要转义反斜杠以将其嵌入String

      【讨论】:

        【解决方案4】:

        是的,它拆分了制表符和空格:

        String t = "test your   function      aaa";
        
        for(String s : t.split("\\s+"))
           System.out.println(s);
        

        输出:

        test
        your 
        function
        aaa
        

        【讨论】:

          猜你喜欢
          • 2023-03-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多