2011-01-01 19 views
249

mogę użyć tego:Usuń wszystkie wystąpienia char z ciągu

String str = "TextX Xto modifyX"; 
str = str.replace('X','');//that does not work because there is no such character '' 

Czy istnieje sposób, aby usunąć wszystkie wystąpienia znaku X z ciągiem w Javie?

Próbowałem tego i nie jest to, co chcę: str.replace('X',' '); //replace with space

+3

Czy próbowałeś zastąpienie pojedynczych ciągów znaków? –

Odpowiedz

425

Spróbuj używając overload that takes CharSequence arguments (np String) zamiast char:

str = str.replace("X", ""); 
+1

Pierwszy argument to wyrażenie regularne, czasami nie działa zgodnie z oczekiwaniami, szczególnie jeśli ten ciąg pochodzi od danych wprowadzonych przez użytkownika. – vbezhenar

+9

@vsb: nieprawda. Oba argumenty tego szczególnego przeciążenia to "CharSequence". http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replace%28java.lang.CharSequence,%20java.lang.CharSequence%29 – LukeH

+3

Masz rację, przepraszam. – vbezhenar

34

Korzystanie

public String replaceAll(String regex, String replacement) 

zadziała.

Użycie będzie str.replace("X", "");.

Wykonywanie

"Xlakjsdf Xxx".replaceAll("X", ""); 

powraca:

lakjsdf xx 
+5

Regex to prawdopodobnie przesada, chyba że jesteś ograniczony do obsługi Java 1.4 - od wersji 1.5 występuje przeciążenie 'replace', które pobiera proste' CharSequence'. – LukeH

+0

tak, dobry punkt –

+3

@LukeH, To jest dekompilowane źródło do String.replace. Używa regex. Zgadzam się, że regex jest ciężki, ale to jest pod maską, nawet dla zaakceptowanej odpowiedzi powyżej. publiczna Zastąp ciąg (CharSequence var1, CharSequence var2) { return Pattern.compile (var1.toString(), 16) .matcher (this).replaceAll (Matcher.quoteReplacement (var2.toString())); } –

-3

Możesz użyć str = str.replace("X", ""); jak wspomniano wcześniej, a wszystko będzie dobrze. Dla twojej informacji '' nie jest pustą (lub ważną) postacią, ale jest '\0'.

Możesz zamiast tego użyć str = str.replace('X', '\0');.

+9

jest to nieprawidłowe. "\ 0" wytworzy rzeczywisty znak null. str.replace ("X", "\ 0") jest równoważne str.replace ("X", "\ u0000"), co wcale nie jest tym, czego chciał OP. – Andrey

7
String test = "09-09-2012"; 
String arr [] = test.split("-"); 
String ans = ""; 

for(String t : arr) 
    ans+=t; 

To jest przykład dla miejsca, w którym usunąłem znak - z ciągu.

+3

Jest to bardzo nieefektywne, szczególnie w porównaniu z zaakceptowaną odpowiedzią . –

+2

Myślę, że ta odpowiedź działa, ale prawidłowa odpowiedź jest krótsza i szybsza – evilReiko

1

Witam Spróbuj poniższy kod

public class RemoveCharacter { 

    public static void main(String[] args){ 
     String str = "MXy nameX iXs farXazX"; 
     char x = 'X'; 
     System.out.println(removeChr(str,x)); 
    } 

    public static String removeChr(String str, char x){ 
     StringBuilder strBuilder = new StringBuilder(); 
     char[] rmString = str.toCharArray(); 
     for(int i=0; i<rmString.length; i++){ 
      if(rmString[i] == x){ 

      } else { 
       strBuilder.append(rmString[i]); 
      } 
     } 
     return strBuilder.toString(); 
    } 
} 
+0

jak byś to zrobił, gdyby zamiast x mieliśmy inny ciąg? Ładne rozwiązanie! –

2

Lubię przy użyciu regex w tej okazji:

str = str.replace(/X/g, ''); 

gdzie g oznacza globalny więc będzie przejść przez całe łańcucha i zastąpić wszystkie X z „” ; jeśli chcesz zastąpić zarówno X i X, wystarczy powiedzieć:

str = str.replace(/X|x/g, ''); 

(zobacz moje skrzypce tutaj: fiddle)

+0

myślę, że to może działać, ale prawidłowa odpowiedź wykonuje szybciej i krócej, to zawsze lepiej unikać RegEx jak najwięcej jak to wiadomo, że jest wolniejszy niż w przypadku innych metod – evilReiko

+13

To nie jest kwestia obsługa JavaScript ... – Mindwin

0
package com.acn.demo.action; 

public class RemoveCharFromString { 

    static String input = ""; 
    public static void main(String[] args) { 
     input = "abadbbeb34erterb"; 
     char token = 'b'; 
     removeChar(token); 
    } 

    private static void removeChar(char token) { 
     // TODO Auto-generated method stub 
     System.out.println(input); 
     for (int i=0;i<input.length();i++) { 
      if (input.charAt(i) == token) { 
      input = input.replace(input.charAt(i), ' '); 
       System.out.println("MATCH FOUND"); 
      } 
      input = input.replaceAll(" ", ""); 
      System.out.println(input); 
     } 
    } 
} 
Powiązane problemy