जावा में यह पता लगाने का एक तरीका है कि क्या स्ट्रिंग का पहला वर्ण एक संख्या है?
एक तरीका है
string.startsWith("1")
और ऊपर 9 तक सभी तरह से करते हैं, लेकिन यह बहुत अक्षम है।
जावा में यह पता लगाने का एक तरीका है कि क्या स्ट्रिंग का पहला वर्ण एक संख्या है?
एक तरीका है
string.startsWith("1")
और ऊपर 9 तक सभी तरह से करते हैं, लेकिन यह बहुत अक्षम है।
जवाबों:
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)एक फेंक देंगे StringIndexOutOfBoundsException। startsWithयह समस्या नहीं है।
पूरी स्थिति को एक पंक्ति बनाने के लिए और लंबाई जांच से बचने के लिए, आप रीगेक्स को निम्न में बदल सकते हैं:
s.matches("\\d.*")
// or the equivalent
s.matches("[0-9].*")
यदि आपके कार्यक्रम में स्थिति तंग लूप में प्रकट नहीं होती है, तो नियमित अभिव्यक्तियों का उपयोग करने के लिए मारा जाने वाला छोटा प्रदर्शन ध्यान देने योग्य नहीं है।
((null!=s) && Character.isDigit(s.charAt(0)) )) या चाल का उपयोग कर सकते हैं जैसेCharacter.isDigit((s?s:"X").charAt(0))
नियमित अभिव्यक्ति बहुत मजबूत लेकिन महंगे उपकरण हैं। यह जाँचने के लिए उनका उपयोग करना मान्य है कि क्या पहला वर्ण एक अंक है लेकिन यह इतना सुंदर नहीं है :) मैं इस तरह से पसंद करता हूँ:
public boolean isLeadingDigit(final String value){
final char c = value.charAt(0);
return (c >= '0' && c <= '9');
}
functionजावा नहीं है। 2) यह केवल अरबी अंकों की अनुमति देता है, न कि चीनी, भारतीय, इत्यादि जो आप पसंद करते हैं, लेकिन यह प्रश्न में निर्दिष्ट नहीं है। 3) मैंने चार साल पहले ही अपने उत्तर में इस सटीक समाधान को कवर कर लिया था।
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");
}
{1,1}प्रत्यय की आवश्यकता नहीं है , जिसका अर्थ है कि "पूर्ववर्ती पैटर्न 1 और 1 बार के बीच प्रकट होना चाहिए"। इसका मतलब बिल्कुल वैसा ही है जैसा पैटर्न अपने आप होता है।
मैं बस इस सवाल पर आया और एक समाधान के साथ योगदान करने पर सोचा जो रेगेक्स का उपयोग नहीं करता है।
मेरे मामले में मैं एक सहायक विधि का उपयोग करता हूं:
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 से बचने की कोशिश।