Замена всех не буквенно-цифровых символов пустыми строками
Я пытался использовать это, но не сработало-
return value.replaceAll("/[^A-Za-z0-9 ]/", "");
11 ответов:
использовать
[^A-Za-z0-9]
.Примечание: удалено пространство, так как это обычно не считается буквенно-цифровым.
return value.replaceAll("[^A-Za-z0-9 ]", "");
Это оставить пробелы не повреждены. Я предполагаю, что это то, что вы хотите. В противном случае удалите пробел из регулярного выражения.
вы должны знать, что
[^a-zA-Z]
заменит символы, которые сами не находятся в диапазоне символов A-Z/a-z. это означает, что специальные символы, такие какé
,ß
etc. или кириллические символы и такие будут удалены.если замена этих символов не требуется использовать предварительно определенные классы символов вместо:
someString.replaceAll("[^\p{IsAlphabetic}^\p{IsDigit}]", "");
PS:
\p{Alnum}
не достигает этого эффекта, он действует так же, как[A-Za-z0-9]
.
вы также можете попробовать это более простое регулярное выражение:
str = str.replaceAll("\P{Alnum}", "");
регулярные выражения Java не требуют, чтобы вы ставили косую черту (
/
) или любой другой разделитель вокруг регулярного выражения, в отличие от других языков, таких как Perl, например.
Я сделал этот метод для создания имен:
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(); }
простой способ:
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]", "")); }
выход: ChlamydiasppIgGIgMIgAAbs8006
Github: https://github.com/AlbinViju/Learning/blob/master/StripNonAlphaNumericFromString.java
Если вы хотите также позволяют буквенно-цифровых символов, которые не относятся к символов набора ASCII, например, немецкий умляут, вы можете рассмотреть следующие решения:
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("");
обратите внимание, что использование флага UNICODE_CHARACTER_CLASS может привести к снижению производительности (см. javadoc этого флага)