我有一个字符串:
Expected attribute value 'internalClosureRule' but was 'internalClosureRule2' - comparing <Option name="internalClosureRule"...> at /TCXML[1]/Header[1]/TransferFormula[1]/OptionSet[1]/Option[1]/@name to <Option name="internalClosureRule2"...> at /TCXML[1]/Header[1]/TransferFormula[1]/OptionSet[1]/Option[1]/@name,
Expected attribute value 'opt_cpd_p2s_skip' but was 'opt_cpd_p2s_skip2' - comparing <Option name="internalClosureRule"...> at /TCXML[1]/Header[1]/TransferFormula[1]/OptionSet[1]/Option[1]/@name to <Option name="internalClosureRule2"...> at /TCXML[1]/Header[1]/TransferFormula[1]/OptionSet[1]/Option[1]/@name
我想从第一个"到"中删除该值,直到第一个逗号(,(,就像字符串中的",分离的值相同的模式应该继续进行。我想将我的字符串打印在没有"到"和直到其"逗号的单独行中。
我的预期输出是:
Expected attribute value 'internalClosureRule' but was 'internalClosureRule2' - comparing <Option name="internalClosureRule"...> at /TCXML[1]/Header[1]/TransferFormula[1]/OptionSet[1]/Option[1]/@name,
Expected attribute value 'opt_cpd_p2s_skip' but was 'opt_cpd_p2s_skip2' - comparing <Option name="internalClosureRule"...> at /TCXML[1]/Header[1]/TransferFormula[1]/OptionSet[1]/Option[1]/@name,
有人可以提供一些帮助吗?
实现这一目标的一种方法是将String#replaceAll
方法与正则表达式使用并用空字符串(""
(替换。在您的情况下,模式很容易,它
to.*,
其中:
to
-> for" to" word。
.*
->对于任何字符
,
->用于逗号
@Test
public void fromFirstToTillComma()
{
String string = "Expected attribute value 'internalClosureRule' but was 'internalClosureRule2' - comparing <Option name="internalClosureRule"...> at /TCXML[1]/Header[1]/TransferFormula[1]/OptionSet[1]/Option[1]/@name to <Option name="internalClosureRule2"...> at /TCXML[1]/Header[1]/TransferFormula[1]/OptionSet[1]/Option[1]/@name,";
String expected = "Expected attribute value 'internalClosureRule' but was 'internalClosureRule2' - comparing <Option name="internalClosureRule"...> at /TCXML[1]/Header[1]/TransferFormula[1]/OptionSet[1]/Option[1]/@name,";
string = string.replaceAll("to.*,", "").trim();
string += ",";
assertEquals(expected, string);
}
可以在此处找到有关Pattern
S的更多信息。
评论后:通过将值分解为逗号,而不是同时处理所有值,而是将问题分为较小的值。然后,您将使每个值分开,并且可以使用我的正则表达式。最后,将逗号分隔的值再次总和。
代码:
@Test
public void fromFirstToTillComma() {
String string = "Expected attribute value 'internalClosureRule' but was 'internalClosureRule2' - comparing <Option name="internalClosureRule"...> at /TCXML[1]/Header[1]/TransferFormula[1]/OptionSet[1]/Option[1]/@name to <Option name="internalClosureRule2"...> at /TCXML[1]/Header[1]/TransferFormula[1]/OptionSet[1]/Option[1]/@name,"
+ "Expected attribute value 'opt_cpd_p2s_skip' but was 'opt_cpd_p2s_skip2' - comparing <Option name="internalClosureRule"...> at /TCXML[1]/Header[1]/TransferFormula[1]/OptionSet[1]/Option[1]/@name to <Option name="internalClosureRule2"...> at /TCXML[1]/Header[1]/TransferFormula[1]/OptionSet[1]/Option[1]/@name,";
String expected = "Expected attribute value 'internalClosureRule' but was 'internalClosureRule2' - comparing <Option name="internalClosureRule"...> at /TCXML[1]/Header[1]/TransferFormula[1]/OptionSet[1]/Option[1]/@name,"
+ "Expected attribute value 'opt_cpd_p2s_skip' but was 'opt_cpd_p2s_skip2' - comparing <Option name="internalClosureRule"...> at /TCXML[1]/Header[1]/TransferFormula[1]/OptionSet[1]/Option[1]/@name,";
String lines[] = string.split(",");
StringBuilder sb = new StringBuilder();
for (String line : lines) {
line += ","; //Add the comma at the end because string.split(",") removed it
line = line.replaceAll("to.*,", "").trim();
sb.append(line);
sb.append(","); //Each value separated with comma
}
String clear = sb.toString().trim();
assertEquals(expected, clear);
}