Saya mencoba menggunakan ini tetapi tidak berhasil-
return value.replaceAll("/[^A-Za-z0-9 ]/", "");
Saya mencoba menggunakan ini tetapi tidak berhasil-
return value.replaceAll("/[^A-Za-z0-9 ]/", "");
Jawaban:
Gunakan [^A-Za-z0-9]
.
Catatan: menghapus spasi karena itu biasanya tidak dianggap alfanumerik.
Mencoba
return value.replaceAll("[^A-Za-z0-9]", "");
atau
return value.replaceAll("[\\W]|_", "");
return value.replaceAll("\\W", "");
Anda harus sadar bahwa [^a-zA-Z]
akan mengganti karakter yang tidak berada dalam rentang karakter AZ / az. Itu berarti karakter khusus seperti é
, ß
dll. Atau karakter cyrillic dan semacamnya akan dihapus.
Jika penggantian karakter ini tidak diinginkan, gunakan kelas karakter yang sudah ditentukan sebelumnya:
str.replaceAll("[^\\p{IsAlphabetic}\\p{IsDigit}]", "");
PS: \p{Alnum}
tidak mencapai efek ini, ia bertindak sama seperti [A-Za-z0-9]
.
[^\\p{IsAlphabetic}\\p{IsDigit}]
bekerja dengan baik.
{IsDigit}
tidak bekerja untuk saya dan {Digit}
tidak adalah karena saya mencoba ini di Android. Dan Android telah UNICODE_CHARACTER_CLASS
dihidupkan secara default. Terima kasih atas izinnya.
Anda juga dapat mencoba regex sederhana ini:
str = str.replaceAll("\\P{Alnum}", "");
str.replaceAll("[^\\p{Alnum}\\s]", "")
\\p{Alnum}\\p{Space}
.
Saya membuat metode ini untuk membuat nama file:
public static String safeChar(String input)
{
char[] allowed = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_".toCharArray();
char[] charArray = input.toString().toCharArray();
StringBuilder result = new StringBuilder();
for (char c : charArray)
{
for (char a : allowed)
{
if(c==a) result.append(a);
}
}
return result.toString();
}
value.replaceAll("[^A-Za-z0-9]", "")
[^abc]
Ketika tanda^
muncul sebagai karakter pertama di dalam tanda kurung siku, itu meniadakan pola. Pola ini cocok dengan karakter apa pun kecuali a atau b atau c.
Melihat kata kunci sebagai dua fungsi:
[(Pattern)] = match(Pattern)
[^(Pattern)] = notMatch(Pattern)
Terlebih lagi mengenai suatu pola:
A-Z = all characters included from A to Z
a-z = all characters included from a to z
0=9 = all characters included from 0 to 9
Oleh karena itu akan mengganti semua char TIDAK termasuk dalam pola
Jika Anda juga ingin membolehkan karakter alfanumerik yang bukan milik set karakter ascii, seperti misalnya jerman umlaut, Anda dapat mempertimbangkan untuk menggunakan solusi berikut:
String value = "your value";
// this could be placed as a static final constant, so the compiling is only done once
Pattern pattern = Pattern.compile("[^\\w]", Pattern.UNICODE_CHARACTER_CLASS);
value = pattern.matcher(value).replaceAll("");
Harap perhatikan bahwa penggunaan flag UNICODE_CHARACTER_CLASS dapat berdampak pada penalti kinerja (lihat javadoc dari flag ini)
Metode sederhana:
public boolean isBlank(String value) {
return (value == null || value.equals("") || value.equals("null") || value.trim().equals(""));
}
public String normalizeOnlyLettersNumbers(String str) {
if (!isBlank(str)) {
return str.replaceAll("[^\\p{L}\\p{Nd}]+", "");
} else {
return "";
}
}
public static void main(String[] args) {
String value = " Chlamydia_spp. IgG, IgM & IgA Abs (8006) ";
System.out.println(value.replaceAll("[^A-Za-z0-9]", ""));
}
output: ChlamydiasppIgGIgMIgAAbs8006
Github: https://github.com/AlbinViju/Learning/blob/master/StripNonAlphaNumericFromString.java
CharMatcher Guava memberikan solusi ringkas:
output = CharMatcher.javaLetterOrDigit().retainFrom(input);