विचार एक स्ट्रिंग पढ़ने और यह सत्यापित करने के लिए है कि इसमें कोई संख्यात्मक वर्ण नहीं है। तो "smith23" की तरह कुछ स्वीकार्य नहीं होगा।
विचार एक स्ट्रिंग पढ़ने और यह सत्यापित करने के लिए है कि इसमें कोई संख्यात्मक वर्ण नहीं है। तो "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 या विस्तारित एकल-चार-एन्कोडेड पर्वतमाला में हैं, तो उपरोक्त उत्तर काम करेगा।
जावा 8 लंबोदर भाव। तेज और सरल दोनों।
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");
}
यह आउटपुट होगा:
नहींं, अन्य पात्रों का पता चला
मैं इस regex अभिव्यक्ति का इस्तेमाल किया (".*[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, 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; }