Jak zamienić znaki specjalne w ciągu?


Odpowiedzi:


187

To zależy od tego, co masz na myśli. Jeśli chcesz się ich pozbyć, zrób to:
(Aktualizacja: najwyraźniej chcesz również zachować cyfry, w takim przypadku użyj drugiej linii)

String alphaOnly = input.replaceAll("[^a-zA-Z]+","");
String alphaAndDigits = input.replaceAll("[^a-zA-Z0-9]+","");

lub odpowiednik:

String alphaOnly = input.replaceAll("[^\\p{Alpha}]+","");
String alphaAndDigits = input.replaceAll("[^\\p{Alpha}\\p{Digit}]+","");

(Wszystko to można znacznie poprawić, wstępnie kompilując wzorzec wyrażenia regularnego i przechowując go w stałej)

Lub z guawą :

private static final CharMatcher ALNUM =
  CharMatcher.inRange('a', 'z').or(CharMatcher.inRange('A', 'Z'))
  .or(CharMatcher.inRange('0', '9')).precomputed();
// ...
String alphaAndDigits = ALNUM.retainFrom(input);

Ale jeśli chcesz zmienić znaki akcentowane w coś sensownego, co nadal jest ascii, spójrz na te pytania:


kiedy używam tej funkcji, usuwa również wszystkie cyfry. ale nie chcę, aby numery były usuwane. po prostu chcę usunąć znaki specjalne. Proszę zasugerować coś ..
— Tanu

cóż, powiedziałeś, że chcesz tylko alfabetu. Ale zaktualizuję moją odpowiedź za minutę
— Sean Patrick Floyd

Chcę połączyć ciąg, ale z pewnym warunkiem, takim jak 1. Jeśli jest tylko jeden wynik, konkatowanie nie jest wymagane 2.Jeśli wynik jest większy niż 1, niż ciąg konkatowany w następującej formie: stos + ponad + przepływ
— Tanu

2
@Tanu to inne pytanie. Zrób to nowy
— Pekka

A jeśli nie chcę usuwać spacji? lub powiedzieć, że wszystkie spacje, jak tabulatory, znaki nowej linii zwinięte jako tylko jedna spacja?
— przeklęty

74

Używam tego.

s = s.replaceAll("\\W", ""); 

Zastępuje wszystkie znaki specjalne z łańcucha.

Tutaj

\ w: znak słowa, skrót od [a-zA-Z_0-9]

\ W: Znak niebędący słowem


Nie działa dla <script> alert ('XSS Attack') </script>. Jak usunąć znaki „<”, „>”, „\”?
— Manoj

11

Aby zachować znaki alfanumeryczne, możesz użyć następującej metody.

replaceAll("[^a-zA-Z0-9]", "");

A jeśli chcesz zachować tylko znaki alfabetyczne, użyj tego

replaceAll("[^a-zA-Z]", "");

6
Do użytku kosmicznegoreplaceAll("[^a-zA-Z0-9 ]", "");
— Qamar

6

Zastąp wszystkie znaki specjalne znakiem

replaceAll("\\your special character","new character");

np .: aby zamienić całe wystąpienie * na białe znaki

replaceAll("\\*","");

* ta instrukcja może w danym momencie zastąpić tylko jeden typ znaku specjalnego


Zdecydowanie tego szukałem, gdy zobaczyłem tytuł pytania "Jak zamienić znaki specjalne w ciągu?" dzięki!
— Pan Drew

2
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9&, _]|^\s)", "");

Tutaj wszystkie znaki specjalne z wyjątkiem spacji, przecinka i ampersandu są zastępowane. Możesz również pominąć spację, przecinek i znak ampersand za pomocą następującego wyrażenia regularnego.

string Output = Regex.Replace(Input, @"([ a-zA-Z0-9_]|^\s)", "");

Gdzie Input to ciąg, który musimy zamienić znaki.


2

Idąc za przykładem odpowiedzi Andrzeja Doyle'a myślę, że lepszym rozwiązaniem jest zastosowanie org.apache.commons.lang3.StringUtils.stripAccents():

package bla.bla.utility;

import org.apache.commons.lang3.StringUtils;

public class UriUtility {
    public static String normalizeUri(String s) {
        String r = StringUtils.stripAccents(s);
        r = r.replace(" ", "_");
        r = r.replaceAll("[^\\.A-Za-z0-9_]", "");
        return r;
    }
}


0

Możesz pobrać kod Unicode dla tego śmieciowego znaku z narzędzia mapy znaków na komputerze z systemem Windows i dodać \ u np. \ U00a9 do symbolu praw autorskich. Teraz możesz użyć tego ciągu z tym konkretnym znakiem śmieciowym, nie usuwaj żadnych śmieciowych znaków, ale zastąp odpowiednim unikodem.



-1
let name = name.replace(/[&\/\\#,+()$~%!.„'":*‚^_¤?<>|@ª{«»§}©®™ ]/g, '').toLowerCase();

Czy możesz trochę wyjaśnić to wyrażenie regularne?
— stdunbar

Zalecam dodanie uwag w sekcji odpowiedzi, aby wyjaśnić kod. Przeczytaj więcej o tym, jak pisać dobre odpowiedzi .
— Joe Ferndz

To naprawdę nie odpowiada na pytanie. Jeśli masz inne pytanie, możesz je zadać, klikając Zadaj pytanie . Możesz także dodać nagrodę, aby zwrócić większą uwagę na to pytanie, gdy zdobędziesz wystarczającą reputację . - Z recenzji
— Aman Garg
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.