gpt4 book ai didi

Java 通过带问号的换行符正则表达式拆分字符串

转载 作者:行者123 更新时间:2023-11-29 09:06:15 25 4
gpt4 key购买 nike

我编写了一个 Java 类,它必须从包含换行符的字符串中提取元素。作为第一步,代码必须按换行符拆分输入字符串并将结果放入数组中。除了在一种特定情况下,这一切都很好。我正在使用以下代码执行拆分:

String lines[] = inputText.split("[\\r?\\n\\r]+");

我遇到的问题是以下行:

##INFO=<ID=DS,Number=0,Type=Flag,Description=""removed?"">"

结果是两行:

##INFO=<ID=DS,Number=0,Type=Flag,Description=""removed
"">"

它 split 在问号上。谁能指出我为什么会这样的正确方向?在正则表达式中没有 '?'指示出现 0 次或 1 次?这不是一种可以接受的换行分割方式吗?

最佳答案

您正在使用字符类([]),这意味着括号内的任何字符,所以在您的情况下 [\\r?\\n\\r] +,表示\\r\\n?\\r ,一次或多次 (+)

换行符的真正可移植正则表达式,由 Unicode UTS #18: Unicode Regular Expressions 定义, 是:

\R => (?:(?>\u000D\u000A)|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029])

this answer 所述由 Perl 名人汤姆·克里斯蒂安森 (Tom Christiansen) 编写。解释 Java 的双重转义(字符串然后正则表达式):

(?:(?>\\u000D\\u000A)|[\\u000A\\u000B\\u000C\\u000D\\u0085\\u2028\\u2029])

关于Java 通过带问号的换行符正则表达式拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14919551/

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