簡體   English   中英

檢查字符串是否只包含字母

[英]Check if String contains only letters

這個想法是讀取一個字符串並驗證它不包含任何數字字符。 所以像“smith23”這樣的東西是不可接受的。

你想要什么? 速度還是簡單? 對於速度,請采用基於循環的方法。 為簡單起見,采用基於單行正則表達式的方法。

速度

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]+");
}

Java 8 lambda 表達式。 既快速又簡單。

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

或者,如果您使用的是 Apache Commons,請使用[StringUtils.isAlpha()]

第一個導入模式:

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

一個快速的方法是:

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來檢查它是否不是alpha String

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,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;
}

雖然有很多方法可以給這只貓剝皮,但我更喜歡將這些代碼包裝到可重用的擴展方法中,這樣以后的工作就變得微不足道了。 使用擴展方法時,您還可以避免使用 RegEx,因為它比直接字符檢查慢。 我喜歡使用 Extensions.cs NuGet 包中的擴展。 它使這項檢查變得如此簡單:

  1. https://www.nuget.org/packages/Extensions.cs包添加到您的項目中。
  2. 將“ using Extensions; ”添加到代碼的頂部。
  3. "smith23".IsAlphabetic()將返回 False 而"john smith".IsAlphabetic()將返回 True。 默認情況下, .IsAlphabetic()方法忽略空格,但它也可以被覆蓋,這樣"john smith".IsAlphabetic(false)將返回 False,因為空格不被視為字母表的一部分。
  4. 其余代碼中的所有其他檢查都只是MyString.IsAlphabetic()

感覺好像我們需要的是找出字符是否只是字母。 這是你如何解決它 -

Character.isAlphabet(int(c)) 

有助於檢查字符串的字符是否為字母。 其中 c 是

s.charAt(elementIndex)

要僅允許 ASCII 字母,可以使用字符類\\p{Alpha} (這相當於[\\p{Lower}\\p{Upper}][a-zA-Z] 。)

boolean allLettersASCII = str.matches("\\p{Alpha}*");

要允許所有 Unicode 字母,請使用字符類\\p{L} (或等效的\\p{IsL} )。

boolean allLettersUnicode = str.matches("\\p{L}*");

請參閱Pattern文檔

我找到了一種檢查字符串是否所有數字都是字母的簡單方法。

public static boolean isStringLetter(String input) {

    boolean b = false;
    for (int id = 0; id < input.length(); id++) {
        if ('a' <= input.charAt(id) && input.charAt(id) <= 'z') {
            b = true;
        } else if ('A' <= input.charAt(id) && input.charAt(id) <= 'Z') {
            b = true;
        } else {
            b = false;
        }
    }
    return b;
}

我希望它可以幫助任何正在尋找這種方法的人。

使用 StringUtils.isAlpha() 方法,它會讓你的生活變得簡單。

解決方案:我更喜歡使用簡單的循環。

public static boolean isAlpha(String s) {
    if (s == null || s.length() == 0) {
        return false;
    }

    char[] chars = s.toCharArray();
    for (int index = 0; index < chars.length; index++) {
        int codePoint = Character.codePointAt(chars, index);
        if (!Character.isLetter(codePoint)) {
            return false;
        }
    }

    return true;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM