如何在 java 中从第一个"to"到第一个逗号 (,) 中删除值

  • 本文关键字:第一个 删除 to java java
  • 更新时间 :
  • 英文 :


我有一个字符串:

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);
}

最新更新