Chcę usunąć znaki specjalne, takie jak:
- + ^ . : ,
z ciągu znaków przy użyciu języka Java.
Chcę usunąć znaki specjalne, takie jak:
- + ^ . : ,
z ciągu znaków przy użyciu języka Java.
replaceAll
je. Jeśli masz bardziej ezoteryczne wymagania, edytuj pytanie. :)
replaceAll
dla nich a, albo wykonaj parsowanie ciąg, dodaj znaki, które nie są znakami, które chcesz usunąć, do innego ciągu, a na końcu po prostu zrób + = do ciągu, który będziesz zwracać.
deleteChars.apply( fromString, "-+^.:," );
- znajdź deleteChars tutaj
Odpowiedzi:
To zależy od tego, co zdefiniujesz jako znaki specjalne, ale spróbuj replaceAll(...)
:
String result = yourString.replaceAll("[-+.^:,]","");
Zwróć uwagę, że ^
znak nie może być pierwszym na liście, ponieważ wtedy albo musiałbyś go uciec, albo oznaczałoby to „dowolne znaki oprócz tych”.
Kolejna uwaga: -
znak musi być pierwszym lub ostatnim na liście, w przeciwnym razie musiałbyś go uciec lub zdefiniowałby zakres (np. :-,
Oznaczałoby „wszystkie znaki w zakresie :
do ,
).
Tak więc, w celu utrzymania spójności i nie zależą od położenia znaków, może chcesz uciec tych wszystkich znaków, które mają specjalne znaczenie w wyrażeniach regularnych (poniższa lista nie jest kompletna, więc zdawać sobie sprawę z innymi postaciami podoba (
, {
, $
itd.) :
String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");
Jeśli chcesz pozbyć się wszystkich znaków interpunkcyjnych i symboli, wypróbuj to wyrażenie regularne: \p{P}\p{S}
(pamiętaj, że w napisach Java musisz pominąć ukośniki:) "\\p{P}\\p{S}"
.
Trzecim sposobem może być coś takiego, jeśli możesz dokładnie zdefiniować, co powinno pozostać w twoim ciągu:
String result = yourString.replaceAll("[^\\w\\s]","");
To znaczy: zamień wszystko, co nie jest znakiem słowa (w każdym przypadku az, 0-9 lub _) lub białą spacją.
Edycja: pamiętaj, że istnieje kilka innych wzorców, które mogą okazać się pomocne. Jednak nie mogę ich wszystkich wyjaśnić, więc zajrzyj do sekcji referencyjnej regular-expressions.info .
Oto mniej restrykcyjna alternatywa dla podejścia „zdefiniuj dozwolone znaki”, zgodnie z sugestią Raya:
String result = yourString.replaceAll("[^\\p{L}\\p{Z}]","");
Wyrażenie regularne pasuje do wszystkiego, co nie jest literą w żadnym języku i nie jest separatorem (białe znaki, podział wiersza itp.). Zauważ, że nie możesz użyć [\P{L}\P{Z}]
(duże P oznacza brak tej właściwości), ponieważ oznaczałoby to „wszystko, co nie jest literą lub białymi znakami”, co prawie pasuje do wszystkiego, ponieważ litery nie są białymi spacjami i odwrotnie.
Dodatkowe informacje o Unicode
Niektóre znaki Unicode wydają się powodować problemy ze względu na różne możliwe sposoby ich kodowania (jako pojedynczy punkt kodowy lub kombinacja punktów kodowych). Więcej informacji można znaleźć na stronie regular-expressions.info .
[\P{L}]
-
znak musi być pierwszym lub ostatnim na liście lub musi zostać zmieniony.
[^\\p{L}\\p{Z}]
wydaje się eliminować również niemieckie umlauty (ä, ö, ü) (przynajmniej w moim przypadku: /), więc wyrażenie „wyrażenie regularne pasuje do wszystkiego, co nie jest literą w żadnym języku” nie wydaje się być w 100% poprawne
String result = yourString.replaceAll("[^\w\s]","");
popełnia błądInvalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
Spowoduje to zastąpienie wszystkich znaków z wyjątkiem alfanumerycznych
replaceAll("[^A-Za-z0-9]","");
Jak opisano tutaj http://developer.android.com/reference/java/util/regex/Pattern.html
Wzorce to kompilowane wyrażenia regularne. W wielu przypadkach, metody takie jak wygoda
String.matches
,String.replaceAll
iString.split
będzie korzystne, ale jeśli trzeba zrobić dużo pracy z tego samego wyrażenia regularnego, może okazać się bardziej skuteczne, aby skompilować go raz i używać go. Klasa Pattern i jej odpowiednik, Matcher, również oferują większą funkcjonalność niż niewielka ilość udostępniana przez String.
public class RegularExpressionTest {
public static void main(String[] args) {
System.out.println("String is = "+getOnlyStrings("!&(*^*(^(+one(&(^()(*)(*&^%$#@!#$%^&*()("));
System.out.println("Number is = "+getOnlyDigits("&(*^*(^(+91-&*9hi-639-0097(&(^("));
}
public static String getOnlyDigits(String s) {
Pattern pattern = Pattern.compile("[^0-9]");
Matcher matcher = pattern.matcher(s);
String number = matcher.replaceAll("");
return number;
}
public static String getOnlyStrings(String s) {
Pattern pattern = Pattern.compile("[^a-z A-Z]");
Matcher matcher = pattern.matcher(s);
String number = matcher.replaceAll("");
return number;
}
}
Wynik
String is = one
Number is = 9196390097
Wypróbuj replaceAll()
metodę String
klasy.
BTW tutaj jest metoda, typ zwrotu i parametry.
public String replaceAll(String regex,
String replacement)
Przykład:
String str = "Hello +-^ my + - friends ^ ^^-- ^^^ +!";
str = str.replaceAll("[-+^]*", "");
Powinien usunąć wszystkie znaki {'^', '+', '-'}, które chciałeś usunąć!
Aby usunąć znak specjalny
String t2 = "!@#$%^&*()-';,./?><+abdd";
t2 = t2.replaceAll("\\W+","");
Wynik będzie: abdd.
To działa doskonale.
Użyj String.replaceAll()
metody w Javie.
replaceAll powinno wystarczyć do rozwiązania problemu.
String
klasy? W szczególności poszukaj słowa „regex”; metod jest kilka, a trochę przemyślenia powinno ci podpowiedzieć, jak postępować ... :)