কোনও স্ট্রিংয়ে জাভা রয়েছে কিনা তা পরীক্ষা করুন


102

আমি এমন একটি প্রোগ্রাম লিখছি যেখানে ব্যবহারকারী নীচের বিন্যাসে একটি স্ট্রিং প্রবেশ করে:

"What is the square of 10?"
  1. আমার স্ট্রিংয়ে একটি সংখ্যা আছে তা যাচাই করতে হবে
  2. এবং তারপরে কেবল সংখ্যাটি বের করুন।
  3. যদি আমি ব্যবহার করি .contains("\\d+")বা .contains("[0-9]+"), প্রোগ্রামটি স্ট্রিংয়ে একটি সংখ্যা খুঁজে না পাবে, ইনপুটটি যাই হোক না কেন, .matches("\\d+")কেবলমাত্র সংখ্যা থাকবে তখনই কাজ করবে।

সন্ধান এবং নিষ্কাশন করার সমাধান হিসাবে আমি কী ব্যবহার করতে পারি?


আপনি যদি ইনপুট স্ট্রিং থেকে কেবল অঙ্কটি না করে প্রথম সংখ্যাটি বের করতে চান তবে আমার উত্তর দেখুন।
সজল দত্ত

উত্তর:


229

এটা চেষ্টা কর

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

2
ডাবল ব্যাকস্ল্যাশ কি করে?
অঙ্কিত

15
ব্যাখ্যা করার জন্য:। * এর অর্থ 0 ডি + (ডাবল ব্যাকস্ল্যাশ কেবল দ্বিতীয় ব্যাকস্ল্যাশ থেকে বাঁচার জন্য আমি মনে করি) এর চেয়ে 0 থেকে অসীম প্রকৃতির কোনও চরিত্র এবং \ d + এর অর্থ 1 সময় থেকে অসীমের একটি অঙ্ক।
জিউডার্ক

6
এটি ভিনগ্রহী বিএস নয়, সেই দিন থেকে যখন কেউ এই জিনিসটি করতে পারে না তবে প্রকৌশলীরা যারা এটি আবিষ্কার করেছিলেন কারণ এটি মূলত একটি গোপন কোড যা কেবল নির্মাতারা জানেন না যতক্ষণ না তারা ভাগ করে নেবে।
জ্যামিসনম্যান 111

পরিবর্তিত, কারণ যদি কেবলমাত্র একটি অঙ্ক উপস্থিত থাকে তবে সমাধানটি যথেষ্ট ভাল, এক্ষেত্রে 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।

"Abc" এর জন্য, একটি খালি স্ট্রিং ফিরে আসবে।


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

আমি দুঃখিত, আমি নিষ্কাশন দেখতে পাইনি you আপনি যদি স্ট্রিংয়ে নম্বরটি বের করতে চান তবে আপনি সহজেই এই কোডটি সম্পাদনা করতে পারেন।
মেলিহ আল্টান্টş

10

s=s.replaceAll("[*a-zA-Z]", "") সমস্ত বর্ণমালা প্রতিস্থাপন করে

s=s.replaceAll("[*0-9]", "") সমস্ত সংখ্যার প্রতিস্থাপন করে

আপনি যদি দুটি উপরে প্রতিস্থাপন করেন তবে আপনি সমস্ত বিশেষ অক্ষরযুক্ত স্ট্রিং পাবেন

আপনি যদি কেবল একটি থেকে পূর্ণসংখ্যা বের করতে চান 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
প্রথম লাইনে সামান্য ত্রুটি রয়েছে, স্ট্রিংটিতে বন্ধনী অনুপস্থিত। প্যাটার্ন পি = প্যাটার্ন ডট কম ফাইল ("(([এজেড]। * [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

এএসসিআইআই ইউনিকোডের শুরুতে রয়েছে, সুতরাং আপনি এরকম কিছু করতে পারেন:

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

আমি নিশ্চিত যে আপনি অন্যান্য মানগুলি বের করতে পারবেন ...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.