gpt4 book ai didi

Java:如何分割字符串而忽略其他部分

转载 作者:行者123 更新时间:2023-12-02 09:46:57 25 4
gpt4 key购买 nike

我有一个用连字符分隔的字符串键列表,如下所示:

String s = "key-keyone-keytwo";

当我使用 s.split("-") 时,我得到一个 [key, keyone, keytwo] 的数组,正如人们所期望的那样。我的问题出现的地方是当我有一个包含破折号的 key 时。我决定转义连字符键,这样:

String s1 = "key-key'-'one-keytwo";

当我用连字符分割字符串 s1 时,结果应该是 [key, key-one, keytwo]

我将使用什么作为分割的正则表达式,以便它满足上述标准。我对正则表达式模式不太熟悉,所以解释也很棒。

更新:单词“key”不会被硬编码。它可以是任何字符串。理想情况下,我想要像这样的 "someString->anotherString->another" ,我可以像 java lambda 那样分割箭头 ->如果出于某种原因,键字符串包含箭头,它可能会被转义,如:"some'->'string->anotherString->another" 并会变成: [some->string, anotherString, another] 我知道它有点复杂,但任何建议都会有帮助!

最佳答案

您想在 - 上拆分,但不在 '-' 上拆分,但同时希望替换 '-'-。您不能仅通过 split() 调用来做到这一点,因为它不进行替换。

您可以通过在 - 上进行拆分来完成拆分部分,该 - 前面不带 后跟 ':

s.split("(?<!')-|-(?!')")

测试

public static void main(String[] args) {
test("key-keyone-keytwo");
test("key-key-'one-keytwo");
test("key-key'-one-keytwo");
test("key-key'-'one-keytwo");
}
private static void test(String str) {
String[] split = str.split("(?<!')-|-(?!')");
System.out.println(Arrays.toString(split));
}

输出

[key, keyone, keytwo]
[key, key, 'one, keytwo]
[key, key', one, keytwo]
[key, key'-'one, keytwo]

如您所见,它没有在 '-' 上拆分,但结果仍然具有“转义”,因此您需要后续操作来修复该问题:

String[] split = str.split("(?<!')-|-(?!')");
for (int i = 0; i < split.length; i++)
split[i] = split[i].replaceAll("'-'", "-");

输出

[key, keyone, keytwo]
[key, key, 'one, keytwo]
[key, key', one, keytwo]
[key, key-one, keytwo]

您可以使用 Streams 在单个语句中完成此操作:

String[] split = Pattern.compile("(?<!')-|-(?!')")
.splitAsStream(str)
.map(s -> s.replaceAll("'-'", "-"))
.toArray(String[]::new);

当然也可以写成一行:

String[] split = Pattern.compile("(?<!')-|-(?!')").splitAsStream(str).map(s -> s.replaceAll("'-'", "-")).toArray(String[]::new);

关于Java:如何分割字符串而忽略其他部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56572989/

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