java 6 matcher类

时间:2010-09-26 19:32:47

标签: java matcher

我有一个字符串如下:

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,progarm正在替换它遇到的所有“EMPTY”。

所以输出如下:

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

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

更新

知道了。非常抱歉大混乱。我将尽我所能尽力使其精确/清晰。

问题改写:

我想使用模式使用java Pattern和matcher类在字符串中搜索。

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

分隔

简化示例如下:

TestString内容:

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

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

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

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

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

我尝试过quantier / POSIX {1}但是徒劳地认为它会限制在TestStr中搜索第一个“”,但是徒劳无功。

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

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

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

1 个答案:

答案 0 :(得分: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);
}

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