从字符串的中间删除单引号,但不从开始和结束

时间:2016-06-07 07:35:29

标签: java

我有一个像

这样的字符串
 String abc = "'Joe's Dinner'";

现在我需要从中间删除引号,以便结果可以像

abc = "'Joes Dinner'"

编辑: 我意识到问题发生在其他地方。实际上我拆分了一个5 GB的XML文件。我正在使用StAX来做到这一点。这是我的代码。

public String split(String fileName){
  XMLInputFactory xif = XMLInputFactory.newInstance();
  XMLEventReader xer = xif.createXMLEventReader(new FileInputStream(new File(fileName)));

  String fileContent = "";

  while(xer.hasNext()) {
    XMLEvent e = xer.nextEvent();
    fileContent = fileContent + e.toString();
  }
  return fileContent;
}

现在,在我的源XML中,该行显示为

<location state="Côte d'Azur" xsi:nil="true" city="Marseille" country="FRANCE"></location>

但在输出中,属性值中的双引号更改为单引号,导致解析时出错。有没有办法保持双引号不变。

2 个答案:

答案 0 :(得分:1)

如果我理解你的问题,那么你需要这样的东西,我会用三个解决方案来解决你的问题,

public class Cote {

    public static void main(String args[]) {
        //First Solution
        String abc = "'Joe's Dinner'";

        //Second Solution
        String abc3 = "'" + abc.replace("'", "") + "'";
        System.out.println(abc3);

        String abc2 = "'";
        for (int i = 1; i < abc.length() - 1; i++) {
            String c = abc.charAt(i) + "";
            if (!c.equals("'")) {
                abc2 += c;
            }
        }
        abc2 += "'";
        System.out.println(abc2);

        //Third Solution
        abc = "<location state='Côte d'Azur' xsi:nil='true' city='Marseille' country='FRANCE'></location>";
        abc2 = "";
        int count = abc.length() - abc.replace("'", "").length();

        int count2 = 0;
        for (int i = 0; i < abc.length(); i++) {
            String c = abc.charAt(i) + "";
            if (c.equals("'")) {
                count2++;
                if (count2 == 1 || count2 == count) {
                    abc2 += c;
                }
            } else {
                abc2 += c;
            }

        }
        System.out.println(abc2);
    }
}
祝你好运

答案 1 :(得分:0)

你可以使用一个名为正向前瞻/后瞻的正则表达式的好功能,这意味着你可以匹配不被视为实际匹配的一部分。在这种情况下,您要忽略字符串的开始和结束字符,因此替换将是:

input.replaceAll("(?<=.)'(?=.)", "");

第一个带括号的部分读取&#34;由任何字符继续&#34;第二部分意味着&#34;其次是任何字符&#34;。

如果你想保留报价而不破坏你的xml,你可能想要转义它,在这种情况下你可以使用

input.replaceAll("(?<=.)'(?=.)", "&apos;");

好锁!