-7

我有一个字符串如下:

TEST|A||B|C|**""**|D|""|||||\r\n
TEST|Z||V|P|**""**|Y||||||||\r\n

我需要在 | 的第 5 次和第 6 次出现之间制作内容 如果内容是“”,则为空白。所以想要的输出是

TEST|A||B|C||D|""|||||\r\n
TEST|Z||V|P||Y||||||||\r\n

所以我使用 matcher/pattern 和 matcher.replaceFirst() 使用这个正则表达式模式:

String regexPattern = "TEST.*\\|([|\\|]*)\\|([|\\|]*)\\|([|\\|]*)\\|([|\\|]*)\\|\"\"\\|([|\\|]*)"

虽然我只想要 | 第 5 次和第 6 次出现的“” 要设为 EMPTY,程序将其遇到的所有“”替换为 EMPTY。

所以输出如下:

TEST|A||B|C||D||||||\r\n
TEST|Z||V|P||Y||||||||\r\n

我不确定是否需要更改我拥有的正则表达式模式?或者有没有办法告诉匹配器类告诉它一旦改变了第一个“”,就不要改变那个匹配模式中的其他“”,而是在另一个出现的 TEST 片段中改变它,如果是这样怎么办?

更新:

知道了。对巨大的混乱感到非常抱歉。我将尽我所能,使其尽可能准确/清晰。

问题改写:

我想使用模式在使用 java Pattern 和匹配器类的字符串中进行搜索。

该字符串有两行数据,由 | 分隔。每行由 \r\n\ 分隔

简化示例如下:

测试字符串内容:

TEST|JUNK1|JUNK2|JUNK3|JUNK4|""|JUNK6|""|JUNK8
TEST|JUNK11|JUNK12|JUNK13|JUNK14|""|JUNK16|

我想要 JUNK4| 之后的 "" (该行中 | 的第 5 次和第 6 次出现之间的内容)在上面的示例中被设为空/空白。我不希望该行其他位置的“”改变。下一行也需要发生同样的事情。

因此,我将以下正则表达式模式与 Java Matcher 和 Pattern 类结合使用如下:

String regexPattern = "TEST.*\\|([|\\|]*)(\"\")([|\\|]*)\\|";
         

但它正在替换每一行中所有出现的“”,这不符合我的要求。

我尝试了量词/POSIX {1},但徒劳地认为它会限制对 TestStr 中第一个“”的搜索,但徒劳无功。

使用 {1} 的正则表达式:

String regexPattern = "TEST.*\\|([|\\|]*)(\"\"){1}([|\\|]*)\\|";

那么如何在模式中进行限制以获取字符串的片段直到第一个“”。

4

1 回答 1

1

一个不使用复杂正则表达式的简单答案:

String temp[] = inputString.split("\\|");
if ("\"\"".equals(temp[5]))
{
    temp[5] = "";
    StringBuilder buf = new StringBuilder();
    for (String s : temp)
        buf.append("|").append(s);
    inputString = buf.substring(1);
}

另外,注意别人对你说的话。使用编辑工具,不要将更正作为答案发布。

于 2010-09-27T02:52:20.707 回答