我有一个字符串如下:
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}([|\\|]*)\\|";
那么如何在模式中进行限制以获取字符串的片段直到第一个“”。
答案 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);
}
另外,要注意别人对你说的话。使用编辑工具,不要将更正作为答案发布。