【问题标题】:Split string by whitespaces removes new line characters用空格分割字符串删除换行符
【发布时间】:2014-07-15 01:34:34
【问题描述】:

我正在用空格分割一个字符串,但由于某种原因,新行字符被删除了。例如:

String[] splitSentence = "Example sentence\n\n This sentence is an example".
   split("\\s+");

splitSentence 将包含以下内容:

["Example", "sentence", "This", "sentence", "is", "an", "example"]

如果我这样做:

String[] splitSentence = "Example sentence\n\n This sentence is an example".
   split("\\s");

splitSentence 将包含以下内容:

["Example", "sentence", "", "", "This", "sentence", "is", "an", "example"]

我正在尝试实现这样的目标:

["Example", "sentence\n\n", "This", "sentence", "is", "an", "example"]  

或者像这样:

["Example", "sentence", "\n", "\n", "This", "sentence", "is", "an", "example"]

我尝试了很多没有运气的事情...任何帮助将不胜感激。

【问题讨论】:

  • \n 也是空格。
  • 只需将“\\s+”改为“+”
  • 如果你想从\s 中排除换行符,然后使用逆的倒数并添加\n 像这样[^\S\n]

标签: java android regex string


【解决方案1】:
String[] splitSentence = "Example sentence\n\n This sentence is an example".
   split(' ');

这个版本应该可以工作,所以空格只会被删除而不是新行。

【讨论】:

    【解决方案2】:

    在正则表达式中,\s 被定义为等同于该集合中的字符:

    [ \t\n\x0B\f\r]
    

    (参见javadoc)。如果您不希望换行符被视为空格,那么您可以编写自己的集合:

    splitSentence = "Example sentence\n\n This sentence is an example".split("[ \t\\x0B\f\r]+");
    

    (或删除您不希望split 识别的其他字符)。

    \t 是制表符,\x0B 是垂直制表符,\f 是 FF(换页),\r 是 CR)

    编辑:此方法似乎产生了您提到的第二个结果,其中 \n 以单独的字符串形式返回:

    splitSentence = "Example sentence\n\n This sentence is an example".split("[ \t\\x0B\f\r]+|(?=\n)");
    

    这使用前瞻在紧跟\n 的点处进行拆分,但不会将\n 视为将从结果中删除的分隔符。

    【讨论】:

      【解决方案3】:

      按空格和制表符分割(不带换行符):

      String[] splitSentence = "Example sentence\n\n This sentence is an example".split("[ \t]+");
      

      结果:["Example", "sentence\n\n", "This", "sentence", "is", "an", "example"]

      【讨论】:

        猜你喜欢
        • 2012-01-02
        • 1970-01-01
        • 2014-10-04
        • 2012-09-22
        • 2022-07-06
        • 2014-12-13
        • 2013-08-02
        • 2023-04-02
        • 2013-10-11
        相关资源
        最近更新 更多