【问题标题】:Removing backslash and newline character (occurring together) in Java在 Java 中删除反斜杠和换行符(一起出现)
【发布时间】:2012-07-24 15:01:59
【问题描述】:

我需要清理来自不同提要的数据流。

数据采用特定格式,如果某个句子跨越多行,则使用“\”(反斜杠)分隔,我想将其删除。 \ 也出现在文本的其他部分,用于转义引号等,我不想删除这些反斜杠。所以最终我想删除“\\n”。

我已经尝试使用正则表达式来删除 \ 和 \n 但它不起作用:

singleLine.replaceAll("(\\\\n|\\\\r)", "");

我不确定在这种情况下什么正则表达式会起作用。

【问题讨论】:

  • String 实例是不可变的,String.replaceAll() 创建一个您需要存储的新 String 实例。
  • 输入文本是否包含反斜杠和 enn,还是包含反斜杠和换行符?您的正则表达式搜索前者。 (当然,正如许多答案中所指出的那样,结果被忽略了。)

标签: java regex


【解决方案1】:

正则表达式对此并不真正需要;如果我是你,我会用...

singleLine=singleLine.replace("\\\\n", "");

很多人认为replace方法只替换一个,但实际上唯一的区别是replaceAll使用的是正则表达式,而replace只是替换String的完全匹配。

如果您确实想使用正则表达式,我相信您必须这样做 \\\\\\\\ (您必须在 Java 和正则表达式中“取消”转义字符,所以 x4,而不仅仅是 x2)

再解释一下

唯一的另一个问题是在您的示例中,您从未将 singLine 设置为等于任何值;我不确定你是隐藏了还是错过了。

编辑: 再解释一下 \\\\\\\\ 的原因,Java 要求您使用 "\\" 来表示一个 \。正则表达式还可以使用 \ 字符,并要求您再次为它做同样的事情。如果您只是在 Java 中使用“\\”,则正则表达式解析器本质上会接收“\”,它是某些事物的转义字符。您需要为正则表达式解析器提供其中两个以对其进行转义,因此在 Java 中,您需要执行 "\\\\" 来表示单个“\”的匹配

【讨论】:

    【解决方案2】:

    对于该正则表达式中的每个模式,您需要 5 个反斜杠字符。

    用途:

    singleLine.replaceAll("(\\\\\n|\\\\\r)", ""); 
    

    反斜杠字符既是字符串中的转义序列也是正则表达式中的转义序列。因此,要在正则表达式中表示文字 \,您需要使用 4 \ 字符 - 您的正则表达式需要 \\ 来获得转义的反斜杠和 each 其中需要在 java String 中转义 - 然后另一个代表 \n\r

    String str = "string with \\\n newline and \\\n newline ...";
    String repl = str.replaceAll("(\\\\\n|\\\\\r)", "");
    System.out.println("str: " + str);
    System.out.println("repl: " + repl);
    

    输出:

    STR: string with \
     newline and \
     newline ...
    REPL: string with  newline and  newline ...
    

    【讨论】:

    • 按照他的措辞,他说他正在寻找“\\n”的东西。我可能误解了这一点,但我认为他的意思正是如此,而不是 "\"
    • 我认为他的意思是“\”后跟不同类型的换行符
    【解决方案3】:

    由于 String 的不可变性,您需要将返回值分配给另一个 String 对象或同一个对象。

    singleLine = singleLine.replaceAll("(\\\\n|\\\\r)", "");
    

    更多信息是here

    【讨论】:

    • 正则表达式仍然不起作用。模式与\\n 等不匹配。
    【解决方案4】:

    请记住,字符串是不可变的。这意味着replaceAll() 不会 更改singleLine 中的字符串。您必须使用返回值来获取修改后的字符串。例如,你可以这样做

    singleLine = singleLine.replaceAll("(\\\\n|\\\\r)", "");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-07
      • 2018-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多