जांचें कि क्या स्ट्रिंग में नंबर जावा हैं


102

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

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

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


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

जवाबों:


229

इसे इस्तेमाल करे

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

2
डबल बैकस्लैश क्या करता है?
अंकित अंकित

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

6
यह विदेशी जादू नहीं है यह गुप्त बीएस है, उन दिनों से जब कोई भी इस सामान को नहीं कर सकता था लेकिन इंजीनियरों ने इसका आविष्कार किया था क्योंकि यह मूल रूप से एक गुप्त कोड है जो केवल रचनाकारों को पता है जब तक वे इसे साझा नहीं करते।
JamisonMan111

संशोधित किया गया है, क्योंकि यदि केवल एक अंक मौजूद है, तो समाधान काफी अच्छा है, इस मामले में 1 या अधिक अंक होने की आवश्यकता नहीं है।
यसिन हज्ज

26

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

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।

"एबीसी" के लिए, एक खाली स्ट्रिंग लौटाएगा।


11

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

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;
}

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

10

s=s.replaceAll("[*a-zA-Z]", "") सभी अक्षर बदल देता है

s=s.replaceAll("[*0-9]", "") सभी अंकों को बदलता है

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

यदि आप केवल पूर्णांक निकालना चाहते हैं a String s=s.replaceAll("[^0-9]", "")

यदि आप केवल अक्षर को एक से निकालना चाहते हैं String s=s.replaceAll("[^a-zA-Z]", "")

मुबारक कोडिंग :)


10

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

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

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

यह सबसे अच्छा है
यशविन मुंसदवाला

9

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

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

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

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

3
पहली पंक्ति में छोटी सी त्रुटि है, स्ट्रिंग में ब्रैकेट गायब है। पैटर्न p = Pattern.compile ("(([AZ]। * [0-9]))");
गौरव त्यागी

भी, यह काम नहीं करता है ... परीक्षण काम करता है, लेकिन 123TEST काम नहीं करेगा।
fergal_dd

7

निम्नलिखित पैटर्न आज़माएं:

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

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

1
क्या आप वाकई इसे ठीक कर चुके हैं?
क्रिस्टोफर

यह अभिव्यक्ति "10"नमूने के लिए जैसे उत्तर के लिए काम नहीं करती है ।
फबडौगल

6

समाधान मैं इस तरह दिखता है:

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));
}

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


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

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


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+.*")केवल संख्या के लिए काम करता है लेकिन अन्य प्रतीकों की तरह //या *आदि नहीं ।


0

ASCII UNICODE की शुरुआत में है, इसलिए आप ऐसा कुछ कर सकते हैं:

(x >= 97 && x <= 122) || (x >= 65 && x <= 90) // 97 == 'a' and 65 = 'A'

मुझे यकीन है कि आप अन्य मूल्यों का पता लगा सकते हैं ...

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