2012-06-18 2 views
-3

У меня есть XML-файл, который содержит значение, имеющим нежелательные символы, такие какJava очистки строковых значений для удаления нежелательных символов

\xc2d 
d\xa0 
\xe7 
\xc3\ufffdd 
\xc3\ufffdd 
\xc2\xa0 
\xc3\xa7 
\xa0\xa0 
'619d813\xa03697' 
\xe9.com 

примеров ввода могут быть

name : John Hinners\xc2d 
email: [email protected]\xe9.com 
and others .... 

требуемого выход должны быть

name : John Hinners 
email: [email protected] 
and others .... 

Я пришел из фона python, где эту задачу можно сделать легко, как

def remove_non_ascii(s): 
    return ''.join(i for i in s if ord(i)<128) 

Есть ли аналогичный способ выполнения одной и той же задачи на Java?

+0

возможно дубликат [Java удаления символов Юникода] (http://stackoverflow.com/questions/11020893/java-removing-unicode-characters) –

ответ

0
String s = "WantedCharactersunwantedCharacters"; 

Если я хочу, чтобы оставшиеся строки, чтобы быть "WantedCharacters", я просто написать:

s = s.replaceAll("unwantedCharacters", ""); 

[EDIT]: Можно, конечно, также написать

private static String removeNonAscii(String s){ 
    StringBuffer sb = new StringBuffer(); 
    for(int i=0; i<s.length(); ++i){ 
     if(s.charAt(i) < 128){ 
      sb.append(s.charAt(i)); 
     } 
    } 
    return sb.toString(); 
} 

если это удовлетворительное решение

+0

У меня были большие проблемы с replaceAll ... он не работает, как ожидалось ... "replaceAll (" \\ ");" и что-то в этом роде. – headgrowe

1

В java это будет не так красиво.

Вы можете использовать регулярное выражение, но если вы не простое определение ваших персонажей лучше, вероятно, сделать это:

 StringBuilder sb = new StringBuilder(); 
     for (int i=0; i<s.length(); i++) { 
      if (((int)s.charAt(i))<128) sb.append(s.charAt(i)); 
     } 
+1

Обратите внимание, что вам не нужно бросать символ char и int в java; они взаимозаменяемы. – EvenLisle

+0

Да, это правда. Я всегда чувствую, что намерение более ясно с кастингом, но это может быть глупо (или из-за того, что я не меняю привычки при смене языка). –

0

Как я уже говорил здесь:

Similar Question

Использование регулярных выражений

String clean = str.replaceAll("\\P{Print}", ""); 

Удаляет все не для печати Charac Ослабляет. Но это также включает в себя \ п (строки), \ т (вкладка) и \ г (возврат каретки), и если вы хотите сохранить эти символы используют:

String clean = str.replaceAll("[^\\n\\r\\t\\p{Print}]", ""); 
Смежные вопросы