Java символы только буквы

Проверить, содержит ли строка только буквы

Идея состоит в том, чтобы прочитать строку и убедиться, что она не содержит числовых символов. Так что что-то вроде «smith23» неприемлемо.

Если вы напишите метод расширения для строк, проверка может быть встроена. Вы также можете использовать уже написанный метод, например Расширения.cs Пакет NuGet, который делает его таким простым, как: Например: «abcXYZ» .IsAlphabetic () вернет True, тогда как «abc123» .IsAlphabetic () вернет False. — Cornelius J. van Dyk

17 ответы

Чего ты хочешь? Скорость или простота? Для скорости используйте подход, основанный на циклах. Для простоты используйте однострочный подход, основанный на RegEx. Скорость

public boolean isAlpha(String name) < char[] chars = name.toCharArray(); for (char c : chars) < if(!Character.isLetter(c)) < return false; >> return true; > 
public boolean isAlpha(String name)

Имейте в виду, что в Java char[] будет закодирован как UTF-16. Это означает, что многосимвольный глиф (где оба символа находятся в суррогатных диапазонах) не будет распознан как буква при индивидуальном просмотре с использованием Character.isLetter(char) . (См. docs.oracle.com/javase/7/docs/api/java/lang/…) Вместо этого вам нужно будет использовать комбинацию String.codePointAt() и Character.isLetter(int) . Конечно, если вы знаете точно что символы в вашей строке находятся в диапазонах ASCII или расширенных односимвольных кодированных диапазонах, тогда приведенный выше ответ будет работать. — Ионокласт Бригам

boolean allLetters = someString.chars().allMatch(Character::isLetter); 

@capt.swag этот вопрос касается Java в целом, я полагаю, что вы, вероятно, имеете в виду Android, когда говорите «уровень API 24» — Адам Берли

Читайте также:  Html quote in input value

Источник

Java — какой лучший способ проверить, содержит ли STRING только определенные символы?

У меня есть эта проблема: у меня есть String , но мне нужно убедиться, что она содержит только буквы A-Z и цифры 0-9. Вот мой текущий код:

boolean valid = true; for (char c : string.toCharArray()) < int type = Character.getType(c); if (type == 2 || type == 1 || type == 9) < // the character is either a letter or a digit >else < valid = false; break; >> 

если вы не хотите использовать regex использовать предопределенную функцию Character класса — оболочки. Преобразуйте вашу строку в toCharArray затем используйте цикл и используйте предопределенные методы.

8 ответов

Поскольку никто больше не беспокоился о «самом быстром», вот мой вклад:

boolean valid = true; char[] a = s.toCharArray(); for (char c: a) < valid = ((c >= 'a') && (c = 'A') && (c = '0') && (c > return valid; 
public static void main(String[] args) < String[] testStrings = ; long startNanos = System.nanoTime(); for (String testString: testStrings) < isAlphaNumericOriginal(testString); >System.out.println("Time for isAlphaNumericOriginal: " + (System.nanoTime() - startNanos) + " ns"); startNanos = System.nanoTime(); for (String testString: testStrings) < isAlphaNumericFast(testString); >System.out.println("Time for isAlphaNumericFast: " + (System.nanoTime() - startNanos) + " ns"); startNanos = System.nanoTime(); for (String testString: testStrings) < isAlphaNumericRegEx(testString); >System.out.println("Time for isAlphaNumericRegEx: " + (System.nanoTime() - startNanos) + " ns"); startNanos = System.nanoTime(); for (String testString: testStrings) < isAlphaNumericIsLetterOrDigit(testString); >System.out.println("Time for isAlphaNumericIsLetterOrDigit: " + (System.nanoTime() - startNanos) + " ns"); > private static boolean isAlphaNumericOriginal(String s) < boolean valid = true; for (char c : s.toCharArray()) < int type = Character.getType(c); if (type == 2 || type == 1 || type == 9) < // the character is either a letter or a digit >else < valid = false; break; >> return valid; > private static boolean isAlphaNumericFast(String s) < boolean valid = true; char[] a = s.toCharArray(); for (char c: a) < valid = ((c >= 'a') && (c = 'A') && (c = '0') && (c > return valid; > private static boolean isAlphaNumericRegEx(String s) < return Pattern.matches("[\\dA-Za-z]+", s); >private static boolean isAlphaNumericIsLetterOrDigit(String s) < boolean valid = true; for (char c : s.toCharArray()) < if(!Character.isLetterOrDigit(c)) < valid = false; break; >> return valid; > 

Производит этот вывод для меня:

Time for isAlphaNumericOriginal: 164960 ns Time for isAlphaNumericFast: 18472 ns Time for isAlphaNumericRegEx: 1978230 ns Time for isAlphaNumericIsLetterOrDigit: 110315 ns 

Источник

Регулярные выражения. Оставить в строке только буквы и цыфры

Здравствуйте. Помогите, пожалуйста, решить проблему. В строке нужно оставить только латинские буквы и цыфры. Хочу сделать это с помощью регулярок.

Регулярные выражения. Требуется оставить в строке только буквы
Требуется оставить в строке только буквы, вариант решения такой: Re = /()/g; S =.

Регулярные выражения: как в строке оставить только то, что в кавычках
добрый вечер! есть строка: ывыпп ‘аввпрар’+’ууппуп’+’#533опрп’ упупупуп мне нужно что бы в ней.

Оставить в строке только буквы
Всем привет=) Прошу помочь разобраться с такой проблемой мне нужно в строке оставить только буквы.

Регулярные выражения — вводить только буквы
Добрый день. Как составить регэксп, согласно которому в инпут можно вводить только буквы (англ-яз.

Оставить в строке только гласные буквы
Заданы М строк символов, которые вводятся с клавиатуры. Каждая заданная строка представляет собой.

Регулярные выражения: только латинские буквы и пробел
Нужно составить регулярное выражение: только латинские буквы и пробел

Оставить в строке только слова, начинающиеся на буквы «A», «D», «K», «P».
Дана строка символов до точки. Оставить в ней только слова, начинающиеся на буквы «A», «D», «K».

Оставить только согласные буквы в вводимой строке
Программа должна оставлять только согласные буквы в вводимой строке uses crt; var s,s1:string;.

Источник

Java Regex для проверки полного имени разрешает только пробелы и буквы

Я хочу, чтобы regex проверял только буквы и пробелы. В основном это должно подтвердить полное имя. Пример: Г-н Стив Коллинз или Стив Коллинз Я пробовал это регулярное выражение. «[A-Za-Z] + \.?» Но не работал. Может кто-нибудь мне помочь постскриптум Я использую Java.

public static boolean validateLetters(String txt)

8 ответов

Проверка имен — сложная проблема, поскольку действительные имена состоят не только из букв A-Z.

По крайней мере, вы должны использовать свойство Unicode для букв и добавлять дополнительные символы. Первым подходом может быть, например,:

\\p — это Свойство символов Unicode, которое соответствует любому типу письма с любого языка

(основываясь на ответе Stema) как насчет этого: «^\pL+[\pL\pZ\pP]<0,>» теперь все тире, точка и пробел также в Unicode

@NickSikrier Я не понимаю твою точку зрения. Конечно, как и . явно упоминается в классе символов, и мне требуется только как минимум один символ. Он также будет соответствовать одному пробелу и ‘ и — . Этот ответ является лишь отправной точкой для тех, кто считает, что им нужно судить, какое имя является действительным. Не стесняйтесь добавлять квантификатор «лучше», чем « + чтобы запросить минимальную / максимальную длину, или уточняйте в поисковой последовательности последовательности символов, которые не имеют смысла для вас (но, возможно, для парня с «экзотическим» именем).

@stema стема Прошу прощения, как отправная точка, конечно, это хороший пример. Во всяком случае, в большинстве случаев, я полагаю, он должен, по крайней мере, начинаться и заканчиваться буквой.

Источник

Оцените статью