gpt4 book ai didi

java - 如何用\替换字符串中的一个或多个\?

转载 作者:搜寻专家 更新时间:2023-11-01 00:59:31 26 4
gpt4 key购买 nike

考虑字符串,

this\is\\a\new\\string

输出应该是:
this\is\a\new\string

所以基本上是一个或多个 \字符应仅替换为一个 \ .
我尝试了以下方法:
str = str.replace("[\\]+","\")

但没有用。我用两个的原因 \[\\]+是因为内部 \存储为 \\ .我知道这可能是一个基本的正则表达式问题,但我可以替换一个或多个普通字母,但不能替换 \特点。任何帮助都非常感谢。

最佳答案

str.replace("[\\]+", "\")问题很少,

  • replace不使用正则表达式( replaceAll 使用)所以 "[\\]"将代表[\]文字,而不是 \也不是 \\ (取决于您认为它代表什么)
  • 即使它确实接受正则表达式 "[\\]"不会是正确的正则表达式,因为 \\]会逃走]所以你最终会得到未封闭的字符类 [..
  • 它不会编译(你的替换字符串没有关闭)

  • 它不会编译,因为 \是转义序列的开始 \X哪里 X需要是
  • 从字符串特殊字符更改为简单文字,就像您的情况 \"会逃走"是文字(例如,您可以打印它)而不是字符串的开头/结尾,
  • 从普通字符变为特殊字符,例如行分隔符 \n \r或制表 \t .

  • 现在我们知道 \是特殊的,用于转义其他字符。那么您认为我们需要做什么才能使 \表示文字(当我们想打印 \ 时)。如果你猜它需要用另一个 \ 转义那么你是对的。创建 \我们需要在字符串中将其写为 "\\" .

    既然你知道如何创建包含 \ 的字符串文字(转义 \ )你可以开始考虑如何创建你的替代品。

    代表一个或多个 \ 的正则表达式可以看起来像
    \\+
    但这是它的原生形式,我们需要使用 String 来创建它。我用过 \\这是因为在正则表达式中 \也是特殊字符(例如 \d 表示数字,而不是 \ 文字后跟 d )所以它也需要先转义以表示 \文字。就像在 String 中一样,我们可以用另一个 \ 来转义它.

    所以表示这个正则表达式的字符串需要写成
    "\\\\+" (我们转义 \ 两次,一次在正则表达式 \\+ 中,一次在字符串中)

    您可以将其用作 replaceAll 的第一个参数(因为前面提到的 replace 不接受正则表达式)。

    现在你将面临的最后一个问题是 replaceAll 的第二个参数方法。如果你写
    replaceAll("\\\\+", "\\")
    它会找到正则表达式的匹配,你会看到异常
    java.lang.IllegalArgumentException: character to be escaped is missing

    这是因为在 replacement部分( replaceAll 方法中的第二个参数)我们也可以使用特殊公式 $x表示来自具有索引 x 的组的当前匹配项.所以才能够逃脱 $我们需要一些转义机制,再次 \用于此目的。 所以\替换件也很特别我们的方法。
    于是再次创建 \我们需要用另一个 \ 来逃避它, 和表示表达式的字符串文字 \\"\\\\" .

    但是让我们回到之前的异常:消息“要转义的字符丢失”指的是 X \X 的一部分公式(X 是我们想要转义的字符)。问题是您的更换较早 "\\"仅代表 \部分,所以这个方法需要 $创建 \$ , 或 \\创建 \文字。所以有效的替换是 "\\$"\\\\" .

    为了使事情工作,您需要将替换方法编写为
    str = str.replaceAll("\\\\+", "\\\\")

    关于java - 如何用\替换字符串中的一个或多个\?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23869613/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com