【问题标题】:How to split a string in Java with caret symbol '^' escaped?java - 如何在Java中拆分带有插入符号'^'的字符串?
【发布时间】:2017-06-14 15:36:27
【问题描述】:

我正在为字符串拆分方法和 java 中的插入符号 (^) 苦苦挣扎。

输入:

value1^value2^value3\^value3part2

预期输出:

[value1, value2, value3^value3part2]

任何人都可以为此提供解决方案吗?

我尝试了多种解决方案,但都没有成功。

谢谢。

【问题讨论】:

  • 向我们展示您的尝试——至少一条路径。
  • @Pavneet_Singh \d 用于数字。这个问题没有提到这些值是数字。即使是这样,即使使用 `\` 转义,此正则表达式模式仍然无法避免在每个 ^ 上进行拆分。
  • 一个问题是转义是否可以转义——如果斜线加倍,是否仍然考虑转义插入符号?顺便说一句,您的问题显示了双反斜杠。这是否意味着双反斜杠是一种转义,或者这是基于 Java 的字符串文字语法的错误?
  • 那么,你确定在双反斜杠的情况下结果不应该是[value1, value2, value3\, value3part2]吗?
  • 这里重要的是,我们是否可以假设如果^ 前面有任意数量的\,是否应该始终将其视为转义(或不转义)。换句话说,\ 可以成为放在最后的价值的一部分吗?这意味着它的目的不是逃避^

标签: java arrays split caret


【解决方案1】:

根据您的 cmets,如果前面没有 \,您似乎只想在 ^ 上拆分。在这种情况下,您可以使用negative look-behind 机制(?<!...) 来测试我们尝试匹配的部分是否前面没有... 中描述的正则表达式。

在您的情况下,您可以像这样使用它:

String[] values = yourLine.split("(?<!\\\\)\\^");

所以你要拆分

  • ^ 上(我们需要转义它\\^ 因为^ 它是正则表达式元字符之一),
  • (?&lt;!\\\\) 之前没有\ - 我们需要转义\ 两次,一次在正则表达式中,一次在字符串文字中。

【讨论】:

    猜你喜欢
    • 2013-08-03
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 2011-03-29
    相关资源
    最近更新 更多