मुझे कैसे पता चलेगा कि एक स्ट्रिंग का पहला वर्ण एक संख्या है?


108

जावा में यह पता लगाने का एक तरीका है कि क्या स्ट्रिंग का पहला वर्ण एक संख्या है?

एक तरीका है

string.startsWith("1")

और ऊपर 9 तक सभी तरह से करते हैं, लेकिन यह बहुत अक्षम है।


10
मैं रेगेक्स तरीके का उल्लेख करने जा रहा था, लेकिन मुझे डर था कि अगर मैंने किया, तो आप इसे आज़माने के लिए तैयार होंगे।
माइकल मायर्स

जवाबों:


259
Character.isDigit(string.charAt(0))

ध्यान दें कि यह किसी भी यूनिकोड अंक की अनुमति देगा , न कि केवल 0-9 पर। आप पसंद कर सकते हैं:

char c = string.charAt(0);
isDigit = (c >= '0' && c <= '9');

या धीमी रेगेक्स समाधान:

s.substring(0, 1).matches("\\d")
// or the equivalent
s.substring(0, 1).matches("[0-9]")

हालाँकि, इनमें से किसी भी विधि के साथ, आपको पहले यह सुनिश्चित करना होगा कि स्ट्रिंग खाली नहीं है। अगर यह है, charAt(0)और substring(0, 1)एक फेंक देंगे StringIndexOutOfBoundsExceptionstartsWithयह समस्या नहीं है।

पूरी स्थिति को एक पंक्ति बनाने के लिए और लंबाई जांच से बचने के लिए, आप रीगेक्स को निम्न में बदल सकते हैं:

s.matches("\\d.*")
// or the equivalent
s.matches("[0-9].*")

यदि आपके कार्यक्रम में स्थिति तंग लूप में प्रकट नहीं होती है, तो नियमित अभिव्यक्तियों का उपयोग करने के लिए मारा जाने वाला छोटा प्रदर्शन ध्यान देने योग्य नहीं है।


पुन: "आपको पहले यह सुनिश्चित होना चाहिए कि स्ट्रिंग खाली नहीं है" - यह सच है और अधिक - फिर - आपको यह भी सुनिश्चित करना चाहिए कि यह रिक्त नहीं है जैसे कि यह सभी प्रदर्शित तरीके अपवादों को फेंक देंगे। आप या तो सीधे जांच कर सकते हैं (जैसे ((null!=s) && Character.isDigit(s.charAt(0)) )) या चाल का उपयोग कर सकते हैं जैसेCharacter.isDigit((s?s:"X").charAt(0))
epeleg

8

नियमित अभिव्यक्ति बहुत मजबूत लेकिन महंगे उपकरण हैं। यह जाँचने के लिए उनका उपयोग करना मान्य है कि क्या पहला वर्ण एक अंक है लेकिन यह इतना सुंदर नहीं है :) मैं इस तरह से पसंद करता हूँ:

public boolean isLeadingDigit(final String value){
    final char c = value.charAt(0);
    return (c >= '0' && c <= '9');
}

12
1) functionजावा नहीं है। 2) यह केवल अरबी अंकों की अनुमति देता है, न कि चीनी, भारतीय, इत्यादि जो आप पसंद करते हैं, लेकिन यह प्रश्न में निर्दिष्ट नहीं है। 3) मैंने चार साल पहले ही अपने उत्तर में इस सटीक समाधान को कवर कर लिया था।
माइकल मायर्स

0
regular expression starts with number->'^[0-9]' 
Pattern pattern = Pattern.compile('^[0-9]');
 Matcher matcher = pattern.matcher(String);

if(matcher.find()){

System.out.println("true");
}

2
आपको {1,1}प्रत्यय की आवश्यकता नहीं है , जिसका अर्थ है कि "पूर्ववर्ती पैटर्न 1 और 1 बार के बीच प्रकट होना चाहिए"। इसका मतलब बिल्कुल वैसा ही है जैसा पैटर्न अपने आप होता है।
एंड्रियाज डॉयल

यह समाधान तब से काम नहीं करता है जब String.matches और पैटर्न API पूर्ण स्ट्रिंग से मेल खाने की कोशिश करते हैं और न केवल पहला चरित्र
अमरीश पांडे

0

मैं बस इस सवाल पर आया और एक समाधान के साथ योगदान करने पर सोचा जो रेगेक्स का उपयोग नहीं करता है।

मेरे मामले में मैं एक सहायक विधि का उपयोग करता हूं:

public boolean notNumber(String input){
    boolean notNumber = false;
    try {
        // must not start with a number
        @SuppressWarnings("unused")
        double checker = Double.valueOf(input.substring(0,1));
    }
    catch (Exception e) {
        notNumber = true;           
    }
    return notNumber;
}

शायद एक overkill, लेकिन मैं जब भी मैं कर सकता हूँ regex से बचने की कोशिश।

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