Ідея полягає в тому, щоб прочитати рядок і переконатися, що він не містить жодних цифрових символів. Тож щось на кшталт "smith23" буде неприйнятним.
Відповіді:
Що ти хочеш? Швидкість чи простота? Для швидкості скористайтеся циклічним підходом. Для простоти виберіть один підхід на основі 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) {
return name.matches("[a-zA-Z]+");
}
char[]кодується як UTF-16. Це означає, що багатосимвольний гліф (де обидві символи знаходяться в сурогатному діапазоні) не буде розпізнаний як буква при індивідуальному дослідженні Character.isLetter(char). (Див. Docs.oracle.com/javase/7/docs/api/java/lang/… ) Натомість вам потрібно буде використовувати комбінацію String.codePointAt()та Character.isLetter(int). Звичайно, якщо ви точно знаєте , що символи у вашому рядку знаходяться в ASCII або розширеному діапазоні, кодованому одинарним символом, тоді відповідь вище буде працювати.
Java 8 лямбда-вирази. І швидко, і просто.
boolean allLetters = someString.chars().allMatch(Character::isLetter);
Шаблон першого імпорту:
import java.util.regex.Pattern;
Тоді використовуйте цей простий код:
String s = "smith23";
if (Pattern.matches("[a-zA-Z]+",s)) {
// Do something
System.out.println("Yes, string contains letters only");
}else{
System.out.println("Nope, Other characters detected");
}
Це виведе:
Ні, виявлено інші символи
Я використав цей вираз регулярного виразу (".*[a-zA-Z]+.*"). За допомогою if notтвердження він уникатиме всіх виразів, які мають букву перед, в кінці або між будь-якими типами інших символів.
String strWithLetters = "123AZ456";
if(! Pattern.matches(".*[a-zA-Z]+.*", str1))
return true;
else return false
.*на початку і в кінці цього не є правильним. Оскільки вони можуть бути будь-якої довжини та включати цифри, 123smith123це буде дійсним ім'ям. Щось на зразок `` ^ [a-zA-Z] + $ `, хоч би працювало, якщо це лише одне слово в рядку.
Швидкий спосіб зробити це є:
public boolean isStringAlpha(String aString) {
int charCount = 0;
String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if (aString.length() == 0) {
return false; //zero length string ain't alpha
}
for (int i = 0; i < aString.length(); i++) {
for (int j = 0; j < alphabet.length(); j++) {
if (aString.substring(i, i + 1).equals(alphabet.substring(j, j + 1))
|| aString.substring(i, i + 1).equals(alphabet.substring(j, j + 1).toLowerCase())) {
charCount++;
}
}
if (charCount != (i + 1)) {
System.out.println("\n**Invalid input! Enter alpha values**\n");
return false;
}
}
return true;
}
Тому що вам не потрібно запускати ціле, aStringщоб перевірити, чи не є це альфа-рядком .
private boolean isOnlyLetters(String s){
char c=' ';
boolean isGood=false, safe=isGood;
int failCount=0;
for(int i=0;i<s.length();i++){
c = s.charAt(i);
if(Character.isLetter(c))
isGood=true;
else{
isGood=false;
failCount+=1;
}
}
if(failCount==0 && s.length()>0)
safe=true;
else
safe=false;
return safe;
}
Я знаю, що там трохи тісно. Я використовував його зі своєю програмою і відчував бажання поділитися ним з людьми. Він може визначити, будь-який символ у рядку не є літерою чи ні. Використовуйте його, якщо хочете щось легко пояснити та оглянути назад.
Швидший спосіб - нижче. Враховуючи літери - це лише аз, AZ.
public static void main( String[] args ){
System.out.println(bestWay("azAZpratiyushkumarsinghjdnfkjsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"));
System.out.println(isAlpha("azAZpratiyushkumarsinghjdnfkjsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"));
System.out.println(bestWay("azAZpratiyushkumarsinghjdnfkjsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"));
System.out.println(isAlpha("azAZpratiyushkumarsinghjdnfkjsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"));
}
public static boolean bettertWay(String name) {
char[] chars = name.toCharArray();
long startTimeOne = System.nanoTime();
for(char c : chars){
if(!(c>=65 && c<=90)&&!(c>=97 && c<=122) ){
System.out.println(System.nanoTime() - startTimeOne);
return false;
}
}
System.out.println(System.nanoTime() - startTimeOne);
return true;
}
public static boolean isAlpha(String name) {
char[] chars = name.toCharArray();
long startTimeOne = System.nanoTime();
for (char c : chars) {
if(!Character.isLetter(c)) {
System.out.println(System.nanoTime() - startTimeOne);
return false;
}
}
System.out.println(System.nanoTime() - startTimeOne);
return true;
}
Час роботи обчислюється в наносекундах. Це може відрізнятися від системи до системи.
5748//bettertWay without numbers
true
89493 //isAlpha without numbers
true
3284 //bettertWay with numbers
false
22989 //isAlpha with numbers
false
Перевірте це, я думаю, це допоможе вам, тому що це працює в моєму проекті, тому як тільки ви перевірите цей код
if(! Pattern.matches(".*[a-zA-Z]+.*[a-zA-Z]", str1))
{
String not contain only character;
}
else
{
String contain only character;
}
String expression = "^[a-zA-Z]*$";
CharSequence inputStr = str;
Pattern pattern = Pattern.compile(expression);
Matcher matcher = pattern.matcher(inputStr);
if(matcher.matches())
{
//if pattern matches
}
else
{
//if pattern does not matches
}
Спробуйте використовувати регулярні вирази: String.matches
public boolean isAlpha(String name)
{
String s=name.toLowerCase();
for(int i=0; i<s.length();i++)
{
if((s.charAt(i)>='a' && s.charAt(i)<='z'))
{
continue;
}
else
{
return false;
}
}
return true;
}
A12341би повернувся true. -1
continueблок. public boolean isAlpha(String name) { String s = name.toLowerCase(); for (int i = 0; i < s.length(); i++) { if ((s.charAt(i) < 'a' || s.charAt(i) > 'z')) { return false; } } return true; }