【问题标题】:Where is \n located in a String?\n 在字符串中的什么位置?
【发布时间】:2014-02-08 23:09:08
【问题描述】:

我有一个来自文本区域的字符串:(变量名为string

This is the first line
And this is the second

如果我要使用string.split(" ") 将其拆分为单独的单词,然后检查哪些单词包含“\n”

for(String s : string.split(" ")) {
    if(s.contains("\n"))
        System.out.println(s);
}

我的句子中的lineAnd 都包含\n。但是,如果我要检查这个词是以 \n 开头还是以它结尾,它不会给我任何结果。

if(s.contains("\n")) {
    System.out.println("Contains");

    if(s.startsWith("\n"))
        System.out.println("Starts with");
    else if(s.endsWith("\n")) {
        System.out.println("Ends with");
    else
        System.out.println("Does not contain");
}

我的结果:

Contains
Does not contain

那么,如果单词包含\n,但它不是以它开头或结尾,它到底在哪里以及如何在不使用replaceAll(String, String) 的情况下管理它?

【问题讨论】:

  • 我猜新行在您的系统 (Windows) 上可能表示为 \r\n
  • @Crozin 在这种情况下'\n' 仍然是最后一个字符...
  • \n 在空白类中,“”也是。在\s+ 上拆分以获得所有那些讨厌的看不见的分隔符。不要依赖 Split() 默认的 BS,如果它是半便携的,永远不要依赖。
  • 诊断打印在空格和换行符很重要的地方应该有括号或引号字符。例如'print("")'.

标签: java regex string contains


【解决方案1】:

字符串看起来像这样:

"This is the first line\nAnd this is the second"

因此,当您将其除以 " " 时,您会得到:

"line\nAnd"

当您打印它时,它看起来像是两个单独的字符串。为了证明这一点,请尝试在 for 循环中添加一个额外的打印:

for (final String s : string.split(" ")) {
    if (s.contains("\n")) {
        System.out.print(s);
        System.out.println(" END");
    }
}

输出:

line
And END

当您尝试检查字符串是否以"\n" 开头或结尾时,您将不会得到任何结果,因为实际上字符串"line\nAnd" 不以"\n" 开头或结尾

【讨论】:

【解决方案2】:

这里是"line\nAnd"

当你打印出来时,它会显示为

line
And

【讨论】:

  • 所以你说的是 'line' 和 'And' 被视为一个词,由 \n 连接?
  • @VinceEmigh 当然。您在空间上拆分,因此 \n 不受影响。
  • @VinceEmigh 如果你想分词,你应该使用string.split("\\s+")
  • @Njol 该正则表达式会产生什么影响?另外,我还看到了另一个,\\w 和 \\w+,介意告诉我这 3 个之间的区别吗?
  • @VinceEmigh 见here\\s+ 匹配一个或多个空白字符,而\\W+ 匹配一个或多个非单词字符,例如数字和符号以及空格。 \\S\\W 分别是另外两个的否定。
【解决方案3】:

没有lineAnd。这是行\n和。你在控制台看到过:


正是因为换行符\n

所以它;在中间,如果您将代码更改为s.contains("\n"))。你会看到的。

【讨论】:

    【解决方案4】:

    字符串:

    This is the first line\nAnd this is the second
    

    " " (space)分割后,你会得到输出为:line\nAnd,这意味着字符串不以\n开头或结尾。

    if (s.contains("\n")) {
        System.out.print(s);
    }
    

    输出:

    line
    And
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 2018-11-01
      • 1970-01-01
      • 2018-12-23
      • 2016-07-30
      • 1970-01-01
      • 2015-03-05
      相关资源
      最近更新 更多