2016-06-07 82 views
-2

我有一个字符串像从字符串中删除单引号,但不是从开始和结束

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> 

但在输出属性值双引号更改为单引号在分析导致的错误。有没有什么办法保留这个双引号。

+3

你试过在SO上搜索吗?你能告诉我们一些代码吗? – TheLostMind

+0

只是'''乔的晚餐'''或者更像'“......文本文本'乔的晚餐'文本文本...”“? – gdros

+0

我实际上正在尝试正则表达式,而我发现的其实也是选择起始单引号。没有运气。 –

回答

1

如果我明白你的问题,那么你需要类似的东西,我提出三点olutions解决您的问题,

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

好运

+0

Offtopic,但thansk! –

+0

你是什么意思@ΦXocę웃Петпо –

0

您可以使用一个很好的功能正则表达式称为积极预见/后顾,这意味着您可以匹配不被视为实际匹配部分的东西。在这种情况下,你要忽略的起点和字符串的结束字符,所以更换是:

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

当第一个括号部分内容,第二部分“以任何字符进行”表示“,其次是任何字符”。

如果你想保持的报价,而不会破坏你的XML您可能要逃避它,而不是在这种情况下,你可以使用

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

好锁!

+0

为什么不使用开始和结束行检查'(?<!^)'(?!$)' – TEXHIK

+0

这也可以正常工作;使用_negative_前瞻/后视... –