2013-09-03 7 views
63

शामिल मैं एक कार्यक्रम है जहाँ उपयोगकर्ता निम्न स्वरूप में एक स्ट्रिंग में प्रवेश करती है लिख रहा हूँ:चेक यदि एक स्ट्रिंग संख्या जावा

"What is the square of 10?" 
  1. मैं वहाँ स्ट्रिंग में एक संख्या है कि जांच की आवश्यकता
  2. और फिर केवल संख्या निकालें।
  3. यदि मैं .contains("\\d+") या .contains("[0-9]+") का उपयोग करता हूं, तो प्रोग्राम स्ट्रिंग में कोई संख्या नहीं मिल सकता है, चाहे इनपुट क्या हो, लेकिन .matches("\\d+") केवल तभी काम करेगा जब केवल संख्याएं होंगी।

मैं खोजने और निकालने के लिए समाधान के रूप में क्या उपयोग कर सकता हूं?

+0

यदि आप पहले नंबर निकालना चाहते हैं, न केवल इनपुट स्ट्रिंग से अंक, मेरा उत्तर देखें। –

उत्तर

1

समाधान मैं इस तरह दिखता है के साथ चला गया:

Pattern numberPat = Pattern.compile("\\d+"); 
    Matcher matcher1 = numberPat.matcher(line); 

    Pattern stringPat = Pattern.compile("What is the square of", Pattern.CASE_INSENSITIVE); 
    Matcher matcher2 = stringPat.matcher(line); 

    if (matcher1.find() && matcher2.find()) 
    { 
     int number = Integer.parseInt(matcher1.group());      
     pw.println(number + " squared = " + (number * number)); 
    } 

मुझे यकीन है कि यह एक पूर्ण समाधान नहीं है, लेकिन यह मेरी जरूरतों उपयुक्त है। मदद के लिए सभी का धन्यवाद।:)

4

निम्नलिखित पैटर्न का प्रयास करें:

.matches("[a-zA-Z ]*\\d+.*") 
+0

हालांकि यदि उपयोगकर्ता विनम्र है और "कृपया" कहता है तो यह असफल हो जाएगा। ओपी के उदाहरण में, एक "?" है पता लगाने के लिए। – christopher

+0

मैंने इसे ठीक कर दिया है। :) –

+1

क्या आप वाकई इसे ठीक कर चुके हैं? – christopher

143

कोशिश इस

str.matches(".*\\d+.*"); 
+56

यह सामान मूल रूप से विदेशी जादू की तरह है –

+1

डबल बैकस्लैश क्या करता है? – ankit

+10

व्याख्या करने के लिए:। * का मतलब है कि किसी भी चरित्र को 0 से अनंत अवसर पर, \\ d + (डबल बैकस्लैश मुझे लगता है कि दूसरी बैकस्लैश से बचने के लिए है) और \ d + का मतलब 1 से अनंत तक एक अंक है। – Giudark

6
Pattern p = Pattern.compile("(([A-Z].*[0-9])"); 
Matcher m = p.matcher("TEST 123"); 
boolean b = m.find(); 
System.out.println(b); 
+1

पहली पंक्ति में मामूली त्रुटि है, स्ट्रिंग में ब्रैकेट गुम है। पैटर्न पी = Pattern.compile ("(([ए-जेड]। * [0-9]))"); –

1

आप इस

String text = "ddd123.0114cc"; 
    String numOnly = text.replaceAll("\\p{Alpha}",""); 
    try { 
     double numVal = Double.valueOf(numOnly); 
     System.out.println(text +" contains numbers"); 
    } catch (NumberFormatException e){ 
     System.out.println(text+" not contains numbers"); 
    }  
1

कोशिश कर सकते हैं आप नहीं है केवल एक को देखने के लिए चाहते हैं के रूप में संख्या लेकिन इसे निकालने के लिए, आपको एक छोटा फू लिखना चाहिए आपके लिए यह कर रहा है। जब तक आप अंक नहीं डालते तब तक पत्र द्वारा पत्र पर जाएं। आह, बस स्टैक ओवरफ्लो पर आपके लिए आवश्यक कोड मिला: find integer in string। स्वीकृत उत्तर देखें।

5

मुझे लगता है कि यह regex से तेज है।

public final boolean containsDigit(String s) { 
    boolean containsDigit = false; 

    if (s != null && !s.isEmpty()) { 
     for (char c : s.toCharArray()) { 
      if (containsDigit = Character.isDigit(c)) { 
       break; 
      } 
     } 
    } 

    return containsDigit; 
} 
+0

मुझे खेद है कि मैंने निकालने को नहीं देखा। अगर आप स्ट्रिंग में संख्या निकालना चाहते हैं, तो आप आसानी से इस कोड को संपादित कर सकते हैं। –

21

आप इनपुट स्ट्रिंग से बाहर पहली संख्या को निकालने के लिए चाहते हैं, आप कर सकते हैं do-

public static String extractNumber(final String str) {     

    if(str == null || str.isEmpty()) return ""; 

    StringBuilder sb = new StringBuilder(); 
    boolean found = false; 
    for(char c : str.toCharArray()){ 
     if(Character.isDigit(c)){ 
      sb.append(c); 
      found = true; 
     } else if(found){ 
      // If we already found a digit before and this char is not a digit, stop looping 
      break;     
     } 
    } 

    return sb.toString(); 
} 

उदाहरण:

इनपुट के लिए "123abc", इच्छा उपरोक्त विधि वापसी 123.

"abc1000def" के लिए, 1000.

"555abc45" के लिए, 555.

"abc" के लिए, एक खाली स्ट्रिंग वापस कर देगा।

6

नीचे कोड "जाँच करें कि एक स्ट्रिंग जावा के संख्या में शामिल है"

Pattern p = Pattern.compile("([0-9])"); 
Matcher m = p.matcher("Here is ur string"); 

if(m.find()){ 
    System.out.println("Hello "+m.find()); 
} 
7

s=s.replaceAll("[*a-zA-Z]", "") के लिए पर्याप्त है की जगह सभी अक्षर

s=s.replaceAll("[*0-9]", "") सभी numerics

की जगह अगर आप दो से ऊपर करना बदलता है आप सभी विशेष विशेषीकृत स्ट्रिंग

प्राप्त करेंगे यदि आपसे केवल पूर्णांक निकालना चाहते हैं

आप कोडिंग :)

1
public String hasNums(String str) { 
     char[] nums = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; 
     char[] toChar = new char[str.length()]; 
     for (int i = 0; i < str.length(); i++) { 
      toChar[i] = str.charAt(i); 
      for (int j = 0; j < nums.length; j++) { 
       if (toChar[i] == nums[j]) { return str; } 
      } 
     } 
     return "None"; 
    } 
1

.matches(".*\\d+.*") केवल संख्या के लिए काम करता है लेकिन केवल एक String s=s.replaceAll("[^a-zA-Z]", "")

मुबारक से अक्षर निकालना चाहते हैं // या * आदि

0

ASCII की तरह नहीं अन्य प्रतीक यूनिकोड की शुरुआत में है, इसलिए आप ऐसा कुछ कर सकते हैं:

(x> = 97 & & x < = 122) || (एक्स> = 65 & & एक्स < = 90)

// 97 == 'एक' और 65 = 'ए', मुझे यकीन है कि आप अन्य मूल्यों पता लगा सकते हैं हूँ ...

5

मैं एक पैटर्न सही नहीं मिला। कृपया छोटे और मीठे समाधान के लिए नीचे दी गई मार्गदर्शिका का पालन करें।

String regex = "(.)*(\\d)(.)*";  
Pattern pattern = Pattern.compile(regex); 
String msg = "What is the square of 10?"; 
boolean containsNumber = pattern.matcher(msg).matches(); 
+0

यह वास्तव में अच्छी तरह से काम करता है। केवल एक चीज जिसे आप देखना चाहते हैं, यदि स्ट्रिंग में बैक स्लैश होता है। अगर ऐसा होता है, तो मुझे लगता है कि यह एक "अवैध भागने चरित्र" त्रुटि उत्पन्न करेगा। – w3bshark

संबंधित मुद्दे