दिलचस्प पोस्ट
टॉमकेट में एकाधिक वेब एप्लिकेशन को कैसे नियुक्त करना है जो विभिन्न बंदरगाहों पर चलेगा? प्लॉट के साथ प्लॉट चिकनी रेखा तेज भाषा में '#' चिह्न का क्या अर्थ है कैसे कोड में jQuery परिवर्तन घटना ट्रिगर करने के लिए जावास्क्रिप्ट का "इन" ऑपरेटर सही क्यों होता है जब यह परीक्षण करता है कि 0 में सरणी में मौजूद है जिसमें 0 नहीं है? एचटीएमएल फार्म (2 जीबी से अधिक) के बावजूद बड़ी फ़ाइल अपलोड अज्ञात आंतरिक वर्ग से बाहरी चर सेट करना तरल टेम्पलेट टैग्स से कैसे बचें? सदस्य '<method>' को एक उदाहरण संदर्भ से नहीं पहुंचा जा सकता है टॉमकैट में एक सर्विसलेट से धागे को बनाने के लिए सुझाई गई विधि क्या है ASP.NET WCF को "कुंजी" और "मान" टैग को छोड़कर, JSON को कन्वर्ट करें क्या मेरे पास एएसपी.नेट सोप वेब सेवा के लिए एक वैकल्पिक पैरामीटर है Jsoup (एचटीएमएल पार्सर) को प्रॉक्सी समर्थन जोड़ने के लिए कैसे? अजगर: कॉल करने वाला विधि नाम कैसे नामित विधि में मिलता है? फ्लोटिंग-प्वाइंट मान की सटीकता बनाए रखने के लिए Printf चौड़ाई निर्दिष्टकर्ता

जावा में एक स्ट्रिंग से अंक निकालें

मेरे पास एक जावा String ऑब्जेक्ट है मुझे इसके केवल अंक निकालने की जरूरत है मैं एक उदाहरण देता हूँ:

"123-456-789" मुझे चाहिए "123456789"

क्या कोई लाइब्रेरी फ़ंक्शन है जो केवल अंक निकालता है?

उत्तर के लिए धन्यवाद इससे पहले कि मैं इन्हें कोशिश करूँ, मुझे यह जानना होगा कि मुझे कोई अतिरिक्त लाइब्रेरी स्थापित करना है या नहीं?

Solutions Collecting From Web of "जावा में एक स्ट्रिंग से अंक निकालें"

आप regex का उपयोग कर सकते हैं और गैर-अंकों को हटा सकते हैं।

 str = str.replaceAll("\\D+",""); 

यहाँ एक अधिक वर्बोस समाधान है कम सुरुचिपूर्ण, लेकिन शायद तेज़:

 public static String stripNonDigits( final CharSequence input /* inspired by seh's comment */){ final StringBuilder sb = new StringBuilder( input.length() /* also inspired by seh's comment */); for(int i = 0; i < input.length(); i++){ final char c = input.charAt(i); if(c > 47 && c < 58){ sb.append(c); } } return sb.toString(); } 

टेस्ट कोड:

 public static void main(final String[] args){ final String input = "0-123-abc-456-xyz-789"; final String result = stripNonDigits(input); System.out.println(result); } 

आउटपुट:

0123456789

बीटीडब्लू: मैंने वर्ण का प्रयोग नहीं किया। यूनिट (सीएच) क्योंकि यह 0 – 9 को छोड़कर कई अन्य वर्ण स्वीकार करता है

 public String extractDigits(String src) { StringBuilder builder = new StringBuilder(); for (int i = 0; i < src.length(); i++) { char c = src.charAt(i); if (Character.isDigit(c)) { builder.append(c); } } return builder.toString(); } 

Google Guava का उपयोग करना:

 CharMatcher.inRange('0','9').retainFrom("123-456-789") 

अद्यतन करें:

Precomputed CharMatcher का उपयोग करना प्रदर्शन को बेहतर बना सकता है

 CharMatcher ASCII_DIGITS=CharMatcher.inRange('0','9').precomputed(); ASCII_DIGITS.retainFrom("123-456-789"); 
 input.replaceAll("[^0-9?!\\.]","") 

यह दशमलव अंक की उपेक्षा करेगा।

उदाहरण: यदि आपके पास इनपुट 445.3kg तो आउटपुट 445.3 होगा।

Google Guava का उपयोग करना:

 CharMatcher.DIGIT.retainFrom("123-456-789"); 

CharMatcher प्लग-इन और प्रयोग करने में काफी रोचक है, उदाहरण के लिए आप निम्न कर सकते हैं:

 String input = "My phone number is 123-456-789!"; String output = CharMatcher.is('-').or(CharMatcher.DIGIT).retainFrom(input); 

आउटपुट == 123-456-789

अपनी आवश्यकता से मेल खाने के लिए नियमित अभिव्यक्ति का उपयोग करें।

 String num,num1,num2; String str = "123-456-789"; String regex ="(\\d+)"; Matcher matcher = Pattern.compile( regex ).matcher( str); while (matcher.find( )) { num = matcher.group(); System.out.print(num); } 

मैं शॉन पैट्रिक फ्लोयड कोड से प्रेरित था और मैं इसे अधिकतम प्रदर्शन के लिए पुनः लिखता हूं।

 public static String stripNonDigitsV2( CharSequence input ) { if (input == null) return null; if ( input.length() == 0 ) return ""; char[] result = new char[input.length()]; int cursor = 0; CharBuffer buffer = CharBuffer.wrap( input ); while ( buffer.hasRemaining() ) { char chr = buffer.get(); if ( chr > 47 && chr < 58 ) result[cursor++] = chr; } return new String( result, 0, cursor ); } 

मैं कम से कम संख्याओं के साथ प्रदर्शन टेस्ट को बहुत लंबे स्ट्रिंग करता हूँ और परिणाम है:

  • मूल कोड 25,5% धीमा है
  • अमरूद का दृष्टिकोण 2.5-3 गुना धीमा है
  • डी + के साथ नियमित अभिव्यक्ति 3-3.5 गुना धीमी है
  • केवल डी के साथ नियमित अभिव्यक्ति 25 + गुना धीमी है

बीटीडब्ल्यू यह स्ट्रिंग कितने समय पर निर्भर करता है स्ट्रिंग के साथ जिसमें केवल 6 अंक होते हैं अमरूद का 50% धीमा होता है और 1 बार धीमा होता है

आप str.replaceAll("[^0-9]", ""); उपयोग कर सकते हैं str.replaceAll("[^0-9]", "");

मैंने फ़ोन नंबर +9 (987) 124124 के लिए कोड को अंतिम रूप दिया है

यूनिकोड वर्ण 4 बाइट्स पर कब्जा कर रहे हैं

 public static String stripNonDigitsV2( CharSequence input ) { if (input == null) return null; if ( input.length() == 0 ) return ""; char[] result = new char[input.length()]; int cursor = 0; CharBuffer buffer = CharBuffer.wrap( input ); int i=0; while ( i< buffer.length() ) { //buffer.hasRemaining() char chr = buffer.get(i); if (chr=='u'){ i=i+5; chr=buffer.get(i); } if ( chr > 39 && chr < 58 ) result[cursor++] = chr; i=i+1; } return new String( result, 0, cursor ); } 

कोड:

 public class saasa { public static void main(String[] args) { // TODO Auto-generated method stub String t="123-456-789"; t=t.replaceAll("-", ""); System.out.println(t); } 
 public class FindDigitFromString { public static void main(String[] args) { String s=" Hi How Are You 11 "; String s1=s.replaceAll("[^0-9]+", ""); //*replacing all the value of string except digit by using "[^0-9]+" regex.* System.out.println(s1); } } 

आउटपुट: 11