【问题标题】:Java: splitting by comma and ignoring commas in tag <p>Java:用逗号分隔并忽略标签 <p> 中的逗号
【发布时间】:2017-05-01 14:31:07
【问题描述】:

我想用逗号分割字符串,但&lt;p&gt;&lt;/p&gt; 中的逗号应该被忽略。

例如,如果我有以下字符串

" Test1, test2, <p> test3, test4, test5, </p> , test6, test7" 

我需要的结果是:

Test1
Test2
<p> test3, test4, test5, </p>
test6 
test7

使用特殊字符如何实现?

【问题讨论】:

标签: java arrays regex split


【解决方案1】:

你可以用这个正则表达式,(?![^&lt;p&gt;]*&lt;/p&gt;)分割你的字符串:

String str = "Test1, test2, <p> test3, test4, test5, </p> , test6, test7";
String spl[] = str.split(",(?![^<p>]*</p>)");

输出

Test1
test2
<p> test3, test4, test5, </p>
test6
test7

演示在这里:

Rextester

【讨论】:

  • 我错过了拆分部分:-)
  • [^&lt;p&gt;] 看起来很可疑。这是“任何不是'>'、'
  • @Arkadiy 我认为除了这种方式你没有办法代表

    你有什么想法吗?

  • 呃...&lt;p&gt;?某种嵌套的负前瞻?我不是那个回答的人:)
  • 当然,它显示空行,因为 ,&lt;p.../&gt; 后面跟着另一个 , ,所以它看到两个分隔符彼此相邻。我将把修复这个问题留给读者作为练习。
【解决方案2】:

您可以先使用“p>”进行拆分: String[] temp = input.split("p&gt;");

在您的示例中,您将在 temp 中包含三个元素:

  • “测试1,测试2,
  • "p> test3, test4, test5,
  • "p> , test6, test7"

现在在 temp 中的所有字符串中,替换 '' 和 '

  • "Test1, test2,"
  • "p> test3, test4, test5,"
  • ", test6, test7"

最后,再次使用 ',' 分割每一行。
除了一些(易于移除的)空字符串之外,它应该可以工作

【讨论】:

    【解决方案3】:

    这应该可行,它不是最理想的,抱歉,但我想不到。

    public static void main(String args[]) {
        String x = " Test1, test2, <p> test3, test4, test5, </p> , test6, test7";
        String newX[];
        newX = x.split(",");
        String newString = "";
        int j = 0;
        int count = 0;
        for(int i = 0; i < newX.length; i ++) {
            if(newX[i].contains("<p>")) {
                count ++;
                j=i;
                while(!newX[i].contains("</p>")) {
                    newString = newString + "," + newX[i];
                    newX[i] = "";
                    i++;
                }
                newString = newString + "," + newX[i];
                newX[i] = "";
                newX[j] = newString;
                newX[j] = newX[j].replaceFirst(",", "");
            }
            else
                count++;
        }
        String output[] = new String[count];
    
        j = 0;
        for(int i = 0; i < newX.length; i++) {
            if(newX[i] != "" && j < count) {
                output[j] =  newX[i];
                System.out.println(output[j]);
                j++;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-12-17
      • 1970-01-01
      • 2014-12-19
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      相关资源
      最近更新 更多