রেজেক্সেস ব্যবহার না করে জাভাতে কোনও অক্ষর হরফ বা নম্বর কিনা তা বলার সর্বোত্তম উপায় কী?


125

স্ট্রিং.চার্ট (সূচক) কোনও নিয়মিত বহিঃপ্রকাশ ব্যবহার না করে জাভাতে একটি অ্যাজ লেটার বা একটি নম্বর হলে স্বীকৃতি দেওয়ার সর্বোত্তম এবং / অথবা সবচেয়ে সহজ উপায় কী? ধন্যবাদ।

উত্তর:


242

Character.isDigit(string.charAt(index))( জাভাডোক ) যদি সত্যই ফিরে আসবে যদি এটি কোনও অঙ্ক
Character.isLetter(string.charAt(index))( জাভাডক ) কোনও অক্ষর হয় তবে তা সত্যই ফিরে আসবে


13
দ্রষ্টব্য: এই চরিত্রটি ইউনিকোড চিঠি / সংখ্যা হলে এটি আপনাকে বলে tell ওপিতে "একটি এজ লেটার" চেয়েছিল ... এর অর্থ যাই হোক না কেন।
স্টিফেন সি

4
আমার ক্ষেত্রে কেন ASCII ├ (255) পাশ করে? আমি এজ, এজেড এবং কেবল 0-9 এর জন্য ভেবেছিলাম?
মিঃ55

@ CᴏɴᴏʀO'Bʀɪᴇɴ লিঙ্কগুলি এখন ঠিক করা হয়েছে। আমাকে জানতে দেওয়ার জন্য ধন্যবাদ।
আদম

13
Character.isLetterOrDigit(string.charAt(index))উভয় যাচাইয়ের জন্য ব্যবহার করুন।
Aspirant9

সাবধানতা অবলম্বন করুন, #LetterOrDigit একটি-Z0-9 এর চেয়ে বেশি পথে সত্য দেয় !!! ডকস
জাভ্যাস /

24

আমি এমন একটি ফাংশন সন্ধান করছি যা কেবলমাত্র লাতিন বর্ণের একটি বা দশমিক সংখ্যা হলে তা যাচাই করে। যেহেতু char c = 255, মুদ্রণযোগ্য সংস্করণ which এবং এটি একটি চিঠি হিসাবে বিবেচনা করা হয় Character.isLetter(c)। আমার মনে হয় এই ফাংশনটি সর্বাধিক বিকাশকারীরা যা খুঁজছেন:

private static boolean isLetterOrDigit(char c) {
    return (c >= 'a' && c <= 'z') ||
           (c >= 'A' && c <= 'Z') ||
           (c >= '0' && c <= '9');
}

1
সবেমাত্র আমাদের কোডটি পেরিয়ে গেলেন এবং অবাক হয়ে গেলেন যে লেসটার এবং # লেটারঅরডিজিটের কারণে সেখানে কতগুলি বাগ রয়েছে ... ধন্যবাদ!
fl0w

1
একরকম আপনি নিজের অক্ষর-সেটগুলি এবং বা ফন্টগুলি মিশ্রিত করেছেন। ইউনিকোড কোডপয়েন্টটি u00ffআসলে চরিত্র ÿ ÿ (একটি অভিশ্রুতি সঙ্গে ছোট হাতের Y।) কোডপয়েন্ট যে প্রতিনিধিত্ব করে ├ হয় u251c
স্টিফেন সি

@ স্টেফেনসি আপনি ঠিক বলেছেন আমি ভুলে গেছি আমি পরিবর্তে যে চরিত্র টাইপ শেষ Nbsp
mr5

কোটলিনে এটি অনেক সহজif (c in 'a'..'z' || с in 'A'..'Z' || c in '0'..'9')
ভ্লাদ

23

উত্তরগুলি ইঙ্গিত দিলে (আপনি যদি এগুলি সাবধানে পরীক্ষা করেন!), আপনার প্রশ্নটি দ্ব্যর্থক। "একটি এজ লেটার" বা একটি অঙ্ক বলতে কী বোঝ?

  • যদি আপনি জানতে চান যে কোনও চরিত্রটি ইউনিকোড চিঠি বা অঙ্ক হয়, তবে Character.isLetterএবং Character.isDigitপদ্ধতিগুলি ব্যবহার করুন ।

  • যদি আপনি জানতে চান যে কোনও অক্ষর একটি ASCII অক্ষর বা অঙ্ক হয়, তবে করণীয় সবচেয়ে ভাল কাজটি 'a' থেকে 'z', 'A' থেকে 'Z' এবং '0' থেকে অক্ষরের সাথে তুলনা করে পরীক্ষা করা উচিত '9'।

নোট করুন যে সমস্ত ASCII অক্ষর / সংখ্যা হ'ল ইউনিকোড অক্ষর / সংখ্যা ... তবে অনেকগুলি ইউনিকোড বর্ণ / অঙ্কের অক্ষর রয়েছে যা ASCII নয়। উদাহরণস্বরূপ, উচ্চারণযুক্ত বর্ণ, সিরিলিক, সংস্কৃত, ...


সাধারণ সমাধানটি এটি করা:

Character.UnicodeBlock block = Character.UnicodeBlock.of(someCodePoint);

এবং তারপরে আপনার আগ্রহী ব্লকগুলির মধ্যে একটি ব্লক কিনা তা পরীক্ষা করে দেখুন some কিছু ক্ষেত্রে আপনাকে একাধিক ব্লকের জন্য পরীক্ষা করতে হবে। উদাহরণস্বরূপ, সিরিলিক অক্ষরের জন্য (কমপক্ষে) 4 কোড ব্লক এবং লাতিনের জন্য 7 টি রয়েছে blocks Character.UnicodeBlockবর্গ সুপরিচিত ব্লক জন্য স্ট্যাটিক ধ্রুবক সংজ্ঞায়িত; দেখতে javadocs

নোট করুন যে কোনও কোড পয়েন্ট সর্বাধিক এক ব্লকে থাকবে।



8

আমি সেরা সম্পর্কে জানি না, তবে এটি আমার কাছে বেশ সহজ বলে মনে হচ্ছে:

Character.isDigit(str.charAt(index))
Character.isLetter(str.charAt(index))

সাবধানতা অবলম্বন করুন, #LetterOrDigit একটি-Z0-9 এর চেয়ে বেশি পথে সত্য দেয় !!! ডকস
জাভ্যাস /

5
// check if ch is a letter
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
    // ...

// check if ch is a digit
if (ch >= '0' && ch <= '9')
    // ...

// check if ch is a whitespace
if ((ch == ' ') || (ch =='\n') || (ch == '\t'))
    // ...

সূত্র: https://docs.oracle.com/javase/tutorial/i18n/text/charintro.html


1
পূর্ববর্তী কোডটি ভুল কারণ এটি কেবল ইংরেজী এবং কয়েকটি অন্যান্য ভাষার সাথে কাজ করে। পূর্ববর্তী উদাহরণটিকে আন্তর্জাতিকীকরণ করতে, নিম্নলিখিত বিবৃতিগুলির সাথে এটি প্রতিস্থাপন করুন: চর চি; // ... // এই কোডটি ঠিক আছে! if (চরিত্র.আইসলেটার (সিএইচ)) // ... যদি (চরিত্র.আইডিজিট (চ)) // ... যদি (চরিত্র.আইসস্পেসচার (চ)) // ...
ইয়াও লি

ওপি স্পষ্টভাবে জিজ্ঞাসা if a string.charAt(index) is an A-z letter। আমরা অন্য ভাষা নিয়ে কথা বলছি না আমরা?
ভাদস্বর

উদাহরণস্বরূপ, জার্মান, একটি ä অ্যাজ পরিসীমা হিসাবে বিবেচিত হতে পারে।
রবার্ট

4

এর মান তুলনা করুন। এটি 'a' এবং 'z', 'A' এবং 'Z', '0' এবং '9' এর মধ্যে হওয়া উচিত


1
এই ম্যানুয়াল পদ্ধতির অন্তর্নির্মিত পদ্ধতির চেয়ে ভাল Character.isLetter()?
ইগোরগানাপলস্কি

1
@ আইগরগানাপলস্কি - আপনি যা করতে চাইছেন তা অবিকল নির্ভর করে। ইঙ্গিত: তারা বিভিন্ন জিনিস!
স্টিফেন সি

@ স্টেফেনসি আমি ভেবেছিলাম অবসরপ্রাপ্ত Character.isLetter()। আমরা আন্তর্জাতিকীকরণের কথা না বললে?
ইগোরগানাপলস্কি

1
@ আইগরগানাপলস্কি - জাভাদোকগুলি পড়ুন। তারপরে ইউনিকোড চশমাগুলি সম্পর্কিত চরিত্রের ক্লাসগুলিতে আসলে কী কোড-পয়েন্ট রয়েছে তা পরীক্ষা করুন। >> অবশ্যই << আমরা আন্তর্জাতিকীকরণের কথা বলছি। জাভাতে অক্ষরগুলি সমস্ত ইউনিকোড ভিত্তিক।
স্টিফেন সি

তুমি এটা কিভাবে করো?
জন কেটজিক

3

নীচের কোডটি ব্যবহার করুন

Character.isLetterOrDigit(string.charAt(index))


1
আপনার উত্তরটি কী যুক্ত করে যা আগের উত্তরগুলিতে আবৃত হয়নি?
রবার্ট

সাবধানতা অবলম্বন করুন, #LetterOrDigit একটি-Z0-9 এর চেয়ে বেশি পথে সত্য দেয় !!! ডকস
জাভ্যাস /

রবার্ট, দুটি ফাংশন কল করার পরিবর্তে আপনি কেবল একটি ফাংশন কল করতে পারেন।
শেখ

0
 import java.util.Scanner;
 public class v{
 public static void main(String args[]){
 Scanner in=new Scanner(System.in);
    String str;
    int l;
    int flag=0;
    System.out.println("Enter the String:");
    str=in.nextLine();
    str=str.toLowerCase();
    str=str.replaceAll("\\s","");
    char[] ch=str.toCharArray();
    l=str.length();
    for(int i=0;i<l;i++){
        if ((ch[i] >= 'a' && ch[i]<= 'z') || (ch[i] >= 'A' && ch[i] <= 'Z')){
        flag=0;
        }
        else

        flag++;
        break;
        } 
if(flag==0)
    System.out.println("Onlt char");


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