我有一个像
这样的字符串 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>
但在输出中,属性值中的双引号更改为单引号,导致解析时出错。有没有办法保持双引号不变。
答案 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("(?<=.)'(?=.)", "'");
好锁!