删除整行逐字符索引

时间:2017-08-13 14:22:13

标签: java string

我有一个像

这样的字符串
String str = "<tr>\n
    <td class="tg-s6z2">@w1d1p7</td>\n
    <td class="tg-s6z2">@w1d2p7</td>\n
    <td class="tg-s6z2">@w1d3p7</td>\n
    <td class="tg-s6z2">@w1d4p7</td>\n
    <td class="tg-s6z2">@w1d5p7</td>\n
    <td class="tg-s6z2">@w1d6p7</td>\n
  </tr>\n"; //removed all backslashes (escapes) for readability.

我需要的是:删除包含例如@ w1d1p7。结果是:

String str = "<tr>\n
    <td class="tg-s6z2">@w1d2p7</td>\n
    <td class="tg-s6z2">@w1d3p7</td>\n
    <td class="tg-s6z2">@w1d4p7</td>\n
    <td class="tg-s6z2">@w1d5p7</td>\n
    <td class="tg-s6z2">@w1d6p7</td>\n
  </tr>\n";

谢谢。

==编辑==

问题是:我可以找到&#34; @ w1d1p7&#34;的索引。如何删除具有此索引的整行?

3 个答案:

答案 0 :(得分:1)

您希望根据换行符拆分字符串,然后查看每行是否有不需要的文本。像这样......

public class HelloString {
  public static void main(String[] args) {
    String str = "<tr>\n"+
            "<td class=\"tg-s6z2\">@w1d1p7</td>\n"+
            "<td class=\"tg-s6z2\">@w1d2p7</td>\n"+
            "<td class=\"tg-s6z2\">@w1d3p7</td>\n"+
            "<td class=\"tg-s6z2\">@w1d4p7</td>\n"+
            "<td class=\"tg-s6z2\">@w1d5p7</td>\n"+
            "<td class=\"tg-s6z2\">@w1d6p7</td>\n"+
            "</tr>\n";
    StringBuilder builder = new StringBuilder();
      String[] split = str.split("\\r?\\n|\\r");
      for (String s : split) {
          if (!s.contains("w1d1p7")) {
              builder.append(s);
          }
      }
      System.out.println(builder.toString());
  }
}

答案 1 :(得分:1)

正如我在上面的评论中提到的,如果你想对HTML内容进行任何严格的操作,你应该使用HTML / XML解析器,而不是基本的字符串函数。话虽这么说,对于您的特定字符串,您可以搜索以下模式,只需用空字符串替换:

<td class=\"tg-s6z2\">@w1d1p7</td>\n

代码段:

String str = "<tr>\n" +
    "<td class=\"tg-s6z2\">@w1d1p7</td>\n" +
    "<td class=\"tg-s6z2\">@w1d2p7</td>\n" +
    "<td class=\"tg-s6z2\">@w1d3p7</td>\n" +
    "<td class=\"tg-s6z2\">@w1d4p7</td>\n" +
    "<td class=\"tg-s6z2\">@w1d5p7</td>\n" +
    "<td class=\"tg-s6z2\">@w1d6p7</td>\n" +
    "</tr>\n";

str = str.replaceAll("<td class=\"tg-s6z2\">@w1d1p7</td>\n", "");
System.out.println(str);

请注意String#replaceAll()具有正则表达式功能,因此如果您的替换要求比此更复杂,我们可能也可以容纳它们。

<强>输出:

<tr>
<td class="tg-s6z2">@w1d2p7</td>
<td class="tg-s6z2">@w1d3p7</td>
<td class="tg-s6z2">@w1d4p7</td>
<td class="tg-s6z2">@w1d5p7</td>
<td class="tg-s6z2">@w1d6p7</td>
</tr>

在这里演示:

Rextester

答案 2 :(得分:0)

我会使用str.split(“/ n”)[你在每个/ n分开]将String拆分成一个ArrayList

然后只删除你不需要的行