স্ট্রিংয়ের প্রথম অক্ষরটি একটি সংখ্যা কিনা তা আমি কীভাবে খুঁজে বের করব?


108

জাভাতে কোনও স্ট্রিংয়ের প্রথম অক্ষর একটি সংখ্যা কিনা তা খুঁজে বের করার কোনও উপায় আছে?

একটি উপায়

string.startsWith("1")

এবং উপরে 9 পর্যন্ত সমস্ত উপায়ে করুন, তবে এটি খুব অদক্ষ মনে হয়।


10
আমি রেজেক্স পদ্ধতিটি উল্লেখ করতে যাচ্ছিলাম, তবে আমার ভয় ছিল যে আমি যদি এটি করি তবে আপনি এটির চেষ্টা করে প্রলুব্ধ হবেন।
মাইকেল ম্যাইইয়ার্স

উত্তর:


259
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)একটি নিক্ষেপ করবেStringIndexOutOfBoundsExceptionstartsWithএই সমস্যা নেই।

পুরো শর্তটি এক লাইন তৈরি করতে এবং দৈর্ঘ্যের চেকগুলি এড়াতে, আপনি নিম্নলিখিতগুলিতে রেজিক্সগুলি পরিবর্তন করতে পারেন:

s.matches("\\d.*")
// or the equivalent
s.matches("[0-9].*")

শর্তটি যদি আপনার প্রোগ্রামের কোনও শক্ত লুপে উপস্থিত না হয়, তবে নিয়মিত অভিব্যক্তি ব্যবহারের জন্য ছোট পারফরম্যান্সটি আঘাতের নজরে আসবে না।


পুনরায়: "আপনাকে অবশ্যই নিশ্চিত হতে হবে যে স্ট্রিংটি খালি নয়" - সত্য এবং এরপরে - আপনাকে অবশ্যই এটিও নালাগুলি নিশ্চিত করতে হবে যেন এটি প্রদর্শিত সমস্ত পদ্ধতিই ব্যতিক্রম ছুঁড়ে ফেলবে। আপনি হয় সরাসরি যাচাই করতে পারেন (উদাঃ ((null!=s) && Character.isDigit(s.charAt(0)) )) অথবা কৌশলগুলি ব্যবহার করতে পারেনCharacter.isDigit((s?s:"X").charAt(0))
epeleg

8

নিয়মিত প্রকাশগুলি খুব শক্ত কিন্তু ব্যয়বহুল সরঞ্জাম। প্রথম অক্ষরটি অঙ্ক হয় কিনা তা যাচাই করার জন্য তাদের ব্যবহার করা বৈধ তবে এটি এত মার্জিত নয় :) আমি এইভাবে পছন্দ করি:

public boolean isLeadingDigit(final String value){
    final char c = value.charAt(0);
    return (c >= '0' && c <= '9');
}

12
1) functionজাভা নয়। ২) এটি কেবল চাইনিজ, ভারতীয় ইত্যাদি নয়, আরবি সংখ্যাগুলিকে অনুমতি দেয় যা আপনার পছন্দ হিসাবে পছন্দ হতে পারে, তবে এটি প্রশ্নের মধ্যে নির্দিষ্ট করা হয়নি। 3) আমি ইতিমধ্যে চার বছর আগে আমার উত্তরে এই সঠিক সমাধানটি কভার করেছি।
মাইকেল মায়ার্স

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

2
আপনার {1,1}প্রত্যয় প্রয়োজন হবে না , যার অর্থ "পূর্ববর্তী প্যাটার্নটি অবশ্যই 1 থেকে 1 বারের মধ্যে উপস্থিত হতে হবে"। এর অর্থ হ'ল প্যাটার্নটি নিজের মতো করে।
আন্দ্রেজ ডয়েল

এই দ্রষ্টব্যটি কার্যকর হয় না যেহেতু স্ট্রিং.ম্যাচগুলি এবং প্যাটার্ন এপিআই কেবল প্রথম অক্ষর নয় বরং সম্পূর্ণ স্ট্রিংয়ের সাথে মেলে চেষ্টা করে
আমরিশ পান্ডে

0

আমি কেবল এই প্রশ্নটি জুড়ে এসেছি এবং রেজ্যাগ্স ব্যবহার না করে এমন একটি সমাধান দিয়ে অবদানের কথা চিন্তা করেছি।

আমার ক্ষেত্রে আমি একটি সহায়ক পদ্ধতি ব্যবহার করি:

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

সম্ভবত একটি ওভারকিল, তবে আমি যখনই পারি রেগেক্স এড়ানোর চেষ্টা করি।

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