জাভাতে কোনও স্ট্রিংয়ের প্রথম অক্ষর একটি সংখ্যা কিনা তা খুঁজে বের করার কোনও উপায় আছে?
একটি উপায়
string.startsWith("1")
এবং উপরে 9 পর্যন্ত সমস্ত উপায়ে করুন, তবে এটি খুব অদক্ষ মনে হয়।
জাভাতে কোনও স্ট্রিংয়ের প্রথম অক্ষর একটি সংখ্যা কিনা তা খুঁজে বের করার কোনও উপায় আছে?
একটি উপায়
string.startsWith("1")
এবং উপরে 9 পর্যন্ত সমস্ত উপায়ে করুন, তবে এটি খুব অদক্ষ মনে হয়।
উত্তর:
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)একটি নিক্ষেপ করবেStringIndexOutOfBoundsException । startsWithএই সমস্যা নেই।
পুরো শর্তটি এক লাইন তৈরি করতে এবং দৈর্ঘ্যের চেকগুলি এড়াতে, আপনি নিম্নলিখিতগুলিতে রেজিক্সগুলি পরিবর্তন করতে পারেন:
s.matches("\\d.*")
// or the equivalent
s.matches("[0-9].*")
শর্তটি যদি আপনার প্রোগ্রামের কোনও শক্ত লুপে উপস্থিত না হয়, তবে নিয়মিত অভিব্যক্তি ব্যবহারের জন্য ছোট পারফরম্যান্সটি আঘাতের নজরে আসবে না।
((null!=s) && Character.isDigit(s.charAt(0)) )) অথবা কৌশলগুলি ব্যবহার করতে পারেনCharacter.isDigit((s?s:"X").charAt(0))
নিয়মিত প্রকাশগুলি খুব শক্ত কিন্তু ব্যয়বহুল সরঞ্জাম। প্রথম অক্ষরটি অঙ্ক হয় কিনা তা যাচাই করার জন্য তাদের ব্যবহার করা বৈধ তবে এটি এত মার্জিত নয় :) আমি এইভাবে পছন্দ করি:
public boolean isLeadingDigit(final String value){
final char c = value.charAt(0);
return (c >= '0' && c <= '9');
}
functionজাভা নয়। ২) এটি কেবল চাইনিজ, ভারতীয় ইত্যাদি নয়, আরবি সংখ্যাগুলিকে অনুমতি দেয় যা আপনার পছন্দ হিসাবে পছন্দ হতে পারে, তবে এটি প্রশ্নের মধ্যে নির্দিষ্ট করা হয়নি। 3) আমি ইতিমধ্যে চার বছর আগে আমার উত্তরে এই সঠিক সমাধানটি কভার করেছি।
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");
}
{1,1}প্রত্যয় প্রয়োজন হবে না , যার অর্থ "পূর্ববর্তী প্যাটার্নটি অবশ্যই 1 থেকে 1 বারের মধ্যে উপস্থিত হতে হবে"। এর অর্থ হ'ল প্যাটার্নটি নিজের মতো করে।
আমি কেবল এই প্রশ্নটি জুড়ে এসেছি এবং রেজ্যাগ্স ব্যবহার না করে এমন একটি সমাধান দিয়ে অবদানের কথা চিন্তা করেছি।
আমার ক্ষেত্রে আমি একটি সহায়ক পদ্ধতি ব্যবহার করি:
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;
}
সম্ভবত একটি ওভারকিল, তবে আমি যখনই পারি রেগেক্স এড়ানোর চেষ্টা করি।