यह बताने का सबसे अच्छा तरीका क्या है कि यदि कोई चरित्र जावा में एक अक्षर या संख्या है, जो कि रेग्जेस का उपयोग किए बिना है?


125

अगर कोई स्ट्रिंग .harAt (इंडेक्स) रेगुलर एक्सप्रेशंस का उपयोग किए बिना जावा में एक एज़ अक्षर या एक नंबर है, तो पहचानने का सबसे अच्छा और / या सबसे आसान तरीका क्या है? धन्यवाद।

जवाबों:


242

Character.isDigit(string.charAt(index))( JavaDoc ) अगर यह एक अंक है
Character.isLetter(string.charAt(index))( JavaDoc ) अक्षर के सही होने पर वापस आ जाएगा


13
नोट: कि ये आपको बताएं कि क्या चरित्र एक यूनिकोड अक्षर / अंक है। ओपी ने "अज़ अक्षर" के लिए कहा ... जो भी इसका मतलब है।
स्टीफन सी

4
मेरे मामले में ASCII ├ (255) क्यों गुजरता है? मैंने सोचा था कि इसके लिए az, AZ और केवल 0-9?
mr5

@ C @O'Bʀɪᴇɴ लिंक अब तय हो गए हैं। मुझे बताने के लिए धन्यवाद।
एडम

13
Character.isLetterOrDigit(string.charAt(index))दोनों सत्यापन के लिए उपयोग करें ।
Aspirant9

सावधान रहो, isLetterOrDigit रास्ते पर एक z0-9 से अधिक सच है !!! डॉक्स का
16:

24

मैं एक ऐसे फंक्शन की तलाश कर रहा हूं, जो तभी चेक करे जब वह लैटिन अक्षरों या दशमलव संख्या में से एक हो। चूंकि char c = 255, प्रिंट करने योग्य संस्करण में able है और इसे एक अक्षर के रूप में माना जाता है Character.isLetter(c)। यह फ़ंक्शन मुझे लगता है कि अधिकांश डेवलपर्स क्या देख रहे हैं:

private static boolean isLetterOrDigit(char c) {
    return (c >= 'a' && c <= 'z') ||
           (c >= 'A' && c <= 'Z') ||
           (c >= '0' && c <= '9');
}

1
बस हमारे कोड के माध्यम से चला गया और आश्चर्यचकित था कि आइलेट और isLetterOrDigit के कारण कितने कीड़े थे। धन्यवाद!
fl0w

1
किसी तरह आप अपने चरित्र-सेट और या फोंट को मिलाते हैं। यूनिकोड u00ffकोडपॉइंट वास्तव में चरित्र is है। (लोअर-केस y एक umlaut के साथ।) कोडपॉइंट जो ├ का प्रतिनिधित्व करता है u251c
स्टीफन सी

@StephenC तुम सही हो। मैं भूल गया कि मैं किस तरह से उस चरित्र को टाइप करता हूँ बजाय nbsp के
mr5

कोटलिन पर यह बहुत सरल हैif (c in 'a'..'z' || с in 'A'..'Z' || c in '0'..'9')
व्लाद

23

जैसा कि उत्तर इंगित करते हैं (यदि आप उन्हें ध्यान से जांचते हैं!), तो आपका प्रश्न अस्पष्ट है। "अज़ अक्षर" या अंक से आपका क्या तात्पर्य है?

  • यदि आप जानना चाहते हैं कि क्या एक चरित्र यूनिकोड पत्र या अंक है, तो Character.isLetterऔर Character.isDigitविधियों का उपयोग करें ।

  • यदि आप जानना चाहते हैं कि क्या कोई अक्षर ASCII अक्षर या अंक है, तो सबसे अच्छी बात यह है कि चरित्र की 'a' से 'z', 'A' से 'Z' और '0' की तुलना करके परीक्षण किया जा सकता है। '9'।

ध्यान दें कि सभी ASCII अक्षर / अंक यूनिकोड अक्षर / अंक हैं ... लेकिन कई यूनिकोड अक्षर / अंक अक्षर हैं जो ASCII नहीं हैं। उदाहरण के लिए, उच्चारण अक्षर, सिरिलिक, संस्कृत, ...


सामान्य उपाय यह करना है:

Character.UnicodeBlock block = Character.UnicodeBlock.of(someCodePoint);

और फिर यह देखने के लिए परीक्षण करें कि क्या ब्लॉक उन लोगों में से एक है जिन्हें आप में रुचि रखते हैं। कुछ मामलों में आपको कई ब्लॉकों के लिए परीक्षण करना होगा। उदाहरण के लिए, सिरिलिक वर्णों के लिए (कम से कम) 4 कोड ब्लॉक हैं और लैटिन के लिए 7। Character.UnicodeBlockवर्ग अच्छी तरह से ज्ञात ब्लॉकों के लिए स्थिर स्थिरांक परिभाषित करता है; javadocs देखें ।

ध्यान दें कि कोई भी कोड बिंदु अधिकांश एक ब्लॉक में होगा।



8

मैं सर्वश्रेष्ठ के बारे में नहीं जानता, लेकिन यह मुझे बहुत सरल लगता है:

Character.isDigit(str.charAt(index))
Character.isLetter(str.charAt(index))

सावधान रहो, isLetterOrDigit रास्ते पर एक z0-9 से अधिक सच है !!! डॉक्स का
fl0w

5
// check if ch is a letter
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
    // ...

// check if ch is a digit
if (ch >= '0' && ch <= '9')
    // ...

// check if ch is a whitespace
if ((ch == ' ') || (ch =='\n') || (ch == '\t'))
    // ...

स्रोत: https://docs.oracle.com/javase/tutorial/i18n/text/charintro.html


1
पूर्ववर्ती कोड गलत है क्योंकि यह केवल अंग्रेजी और कुछ अन्य भाषाओं के साथ काम करता है। पिछले उदाहरण का अंतर्राष्ट्रीयकरण करने के लिए, इसे निम्नलिखित कथनों से बदलें: char ch; // ... // यह कोड ठीक है! if (Character.isLetter (ch)) // ... if (Character.isDigit (ch)) // ... if (Character.isSpaceChar (ch)) // ...
याओ ली

ओपी ने स्पष्ट रूप से पूछा if a string.charAt(index) is an A-z letter। तो क्या हम अन्य भाषाओं के बारे में बात नहीं कर रहे हैं?
वदसंबर

उदाहरण के लिए, जर्मन, एक ä को एज रेंज में माना जा सकता है।
रॉबर्ट

4

इसके मूल्य की तुलना करें। यह 'a' और 'z', 'A' और 'Z', '0' और '9' के मान के बीच होना चाहिए।


1
यह मैनुअल दृष्टिकोण अंतर्निहित Character.isLetter()पद्धति से बेहतर है ?
इगोरगानापोलस्की

1
@IgorGanapolsky - यह ठीक-ठीक निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं। संकेत: वे अलग-अलग काम करते हैं!
स्टीफन सी।

@StephenC मुझे लगा Character.isLetter()कि अल्पविकसित है। जब तक हम अंतर्राष्ट्रीयकरण की बात नहीं कर रहे हैं?
इगोरगानापोलस्की

1
@IgorGanapolsky - javadocs पढ़ें। फिर संबंधित चरित्र वर्गों में वास्तव में क्या कोड-बिंदु हैं, इसके लिए यूनिकोड स्पेक्स की जांच करें। >> बेशक << हम अंतर्राष्ट्रीयकरण के बारे में बात कर रहे हैं। जावा में वर्ण सभी यूनिकोड आधारित हैं।
स्टीफन सी।

आप यह कैसे करते हैं?
जॉन ktejik

3

नीचे दिए गए कोड का उपयोग करें

Character.isLetterOrDigit(string.charAt(index))


1
आपका उत्तर क्या है जो पिछले उत्तरों में शामिल नहीं किया गया है?
रॉबर्ट

सावधान रहो, isLetterOrDigit रास्ते पर एक z0-9 से अधिक सच है !!! डॉक्स का
16:

रॉबर्ट, दो कार्यों को कॉल करने के बजाय आप केवल एक फ़ंक्शन को कॉल कर सकते हैं।
शेख

0
 import java.util.Scanner;
 public class v{
 public static void main(String args[]){
 Scanner in=new Scanner(System.in);
    String str;
    int l;
    int flag=0;
    System.out.println("Enter the String:");
    str=in.nextLine();
    str=str.toLowerCase();
    str=str.replaceAll("\\s","");
    char[] ch=str.toCharArray();
    l=str.length();
    for(int i=0;i<l;i++){
        if ((ch[i] >= 'a' && ch[i]<= 'z') || (ch[i] >= 'A' && ch[i] <= 'Z')){
        flag=0;
        }
        else

        flag++;
        break;
        } 
if(flag==0)
    System.out.println("Onlt char");


}
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.