Ik heb een string met veel speciale tekens. Ik wil die allemaal verwijderen, maar alfabetische tekens behouden.
Hoe kan ik dit doen?
Antwoord 1, autoriteit 100%
Dat hangt ervan af wat je bedoelt. Als je ze gewoon kwijt wilt, doe dan dit:
(Update: blijkbaar wil je ook cijfers behouden, gebruik dan de tweede regel)
String alphaOnly = input.replaceAll("[^a-zA-Z]+","");
String alphaAndDigits = input.replaceAll("[^a-zA-Z0-9]+","");
of het equivalent:
String alphaOnly = input.replaceAll("[^\\p{Alpha}]+","");
String alphaAndDigits = input.replaceAll("[^\\p{Alpha}\\p{Digit}]+","");
(Al deze kunnen aanzienlijk worden verbeterd door het regex-patroon vooraf te compileren en op te slaan in een constante)
Of, met Guave:
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);
Maar als je tekens met accenten wilt omzetten in iets zinnigs dat nog steeds ascii is, kijk dan eens naar deze vragen:
- Java-string converteren naar ASCII
- Java verandert áéőűú in aeouu
- ń ǹ ň ñ ṅ ņ ṇ ṋ ṉ ̈ ɲ ƞ ᶇ ɳ ȵ –> n of Verwijder diakritische tekens uit unicode-tekens
Antwoord 2, autoriteit 38%
Ik gebruik dit.
s = s.replaceAll("\\W", "");
Het vervangt alle speciale tekens uit de tekenreeks.
Hier
\w : Een woordteken, een afkorting voor [a-zA-Z_0-9]
\W : Een niet-woord karakter
Antwoord 3, autoriteit 6%
U kunt de volgende methode gebruiken om alfanumerieke tekens te behouden.
replaceAll("[^a-zA-Z0-9]", "");
En als u alleen alfabetische tekens wilt behouden, gebruikt u dit
replaceAll("[^a-zA-Z]", "");
Antwoord 4, autoriteit 4%
Vervang speciale tekens door
replaceAll("\\your special character","new character");
ex:om alle voorkomen van * te vervangen door witruimte
replaceAll("\\*","");
*deze verklaring kan slechts één type speciaal teken tegelijk vervangen
Antwoord 5, autoriteit 4%
Volgens het voorbeeld van Andrzej Doyle’s antwoord, denk ik dat de betere oplossing is om 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;
}
}
6
U kunt eenvoudige reguliere uitdrukkingen gebruiken op snaren om alle speciale tekens te vinden of patroon- en matcherklassen te gebruiken om door de gebruiker gedefinieerde snaren te zoeken / wijzigen / wijzigen. Deze link heeft een aantal eenvoudige en gemakkelijk te begrijpen voorbeelden voor reguliere expressies: http: //www.vogella .de / artikelen / javaregularexpressions / artikel.html
7
U kunt Unicode voor dat ongewenste personage van KarakterMap Tool in Window PC en toevoegen \ U b.v. \ u00A9 voor auteursrechtsymbool.
Nu kunt u die tekenreeks gebruiken met die specifieke rommelcaharacter, verwijder geen ongewenste karakter, maar vervangt u met de juiste Unicode.
8
Gebruik voor spaties “[^ A-Z A-Z 0-9]” Dit patroon