- 1 1. পরিচয়
- 2 2. জাভাতে স্ট্রিং মৌলিক বিষয়
- 3 3. স্ট্রিং তুলনার পদ্ধতি
- 4 ৪. ব্যবহারিক উদাহরণ
- 5 ৫. পারফরম্যান্স এবং অপটিমাইজেশন
- 6 ৬. প্রায়শই জিজ্ঞাসিত প্রশ্ন (FAQ)
- 6.1 Q1. == এবং equals()-এর মধ্যে পার্থক্য কী?
- 6.2 Q2. কেন equals() ব্যবহার করা কখনও কখনও নাল (null) এর কারণে ত্রুটি ঘটায়?
- 6.3 Q3. কেস (বড়/ছোট অক্ষর) বিবেচনা না করে কীভাবে স্ট্রিং তুলনা করা যায়?
- 6.4 Q4. সাজানো (লেক্সিকোগ্রাফিক) ক্রমে স্ট্রিং কীভাবে তুলনা করবেন?
- 6.5 Q5. স্ট্রিং তুলনার সেরা অনুশীলনগুলো কী?
- 7 7. উপসংহার
1. পরিচয়
জাভাতে স্ট্রিং তুলনা কেন গুরুত্বপূর্ণ?
জাভা প্রোগ্রামিংয়ে, স্ট্রিং (String) নিয়ে কাজ করা অত্যন্ত সাধারণ। ব্যবহারকারীর নাম পরীক্ষা করা, ফর্ম ইনপুট যাচাই করা, এবং API প্রতিক্রিয়া যাচাই করা হল কয়েকটি উদাহরণ যেখানে স্ট্রিং তুলনা প্রয়োজন।
এই পর্যায়ে, স্ট্রিংগুলি কীভাবে সঠিকভাবে তুলনা করা যায় তা নবীনদের জন্য একটি অপ্রত্যাশিত সাধারণ বাধা হয়ে দাঁড়ায়। বিশেষ করে, == অপারেটর এবং equals() মেথডের মধ্যে পার্থক্য না বোঝা অপ্রত্যাশিত ফলাফল উৎপন্ন করে এমন বাগ সৃষ্টি করতে পারে।
“==” বনাম “equals()” না বোঝার ঝুঁকি
উদাহরণস্বরূপ, নিম্নলিখিত কোডটি দেখুন।
String a = "apple";
String b = new String("apple");
System.out.println(a == b); // Result: false
System.out.println(a.equals(b)); // Result: true
অনেক মানুষ এই আউটপুটে অবাক হয়। যদিও স্ট্রিংগুলি একই রকম দেখায়, == মিথ্যা (false) ফেরত দেয় এবং equals() সত্য (true) ফেরত দেয়। এটি ঘটে কারণ জাভা স্ট্রিংকে রেফারেন্স টাইপ হিসেবে বিবেচনা করে, এবং == রেফারেন্সের ঠিকানা তুলনা করে, বিষয়বস্তু নয়।
আপনি দেখতে পাচ্ছেন, স্ট্রিংগুলি সঠিকভাবে তুলনা করা প্রোগ্রামের নির্ভরযোগ্যতা এবং পাঠযোগ্যতার উপর সরাসরি প্রভাব ফেলে। বিপরীতে, সঠিক পদ্ধতি বুঝে নিলে আপনি অনেক বাগকে ঘটার আগে প্রতিরোধ করতে পারেন।
এই প্রবন্ধে আপনি কী শিখবেন
এই প্রবন্ধে, আমরা জাভাতে স্ট্রিং তুলনা সম্পর্কে মৌলিক থেকে উন্নত কৌশল পর্যন্ত সতর্কতার সঙ্গে ব্যাখ্যা করব। আমরা সাধারণ প্রশ্নগুলোর উত্তর স্পষ্ট ও গঠনমূলকভাবে দেব, যাতে নবীনদের জন্য অনুসরণ করা সহজ হয়।
==এবংequals()এর মধ্যে পার্থক্য কী?- কেস উপেক্ষা করে কীভাবে স্ট্রিং তুলনা করবেন?
- লেক্সিকোগ্রাফিক (শব্দকোষ) ক্রমে কীভাবে স্ট্রিং তুলনা করবেন?
nullসহ স্ট্রিংগুলি কীভাবে নিরাপদে তুলনা করবেন?
প্রায়োগিক কোড উদাহরণগুলোর মাধ্যমে, আপনি জাভাতে সঠিক স্ট্রিং তুলনা সম্পর্কে দৃঢ় ধারণা গড়ে তুলবেন।
2. জাভাতে স্ট্রিং মৌলিক বিষয়
স্ট্রিংগুলি রেফারেন্স টাইপ
জাভাতে, String টাইপটি প্রিমিটিভ টাইপ (যেমন int বা boolean) নয়, বরং একটি রেফারেন্স টাইপ। এর অর্থ হল একটি String ভেরিয়েবল প্রকৃত টেক্সট সংরক্ষণ করে না, বরং হিপ মেমরিতে অবস্থিত একটি স্ট্রিং অবজেক্টের রেফারেন্স ধরে রাখে।
উদাহরণস্বরূপ, যখন আপনি নিম্নলিখিতটি লিখবেন:
String a = "hello";
String b = "hello";
উভয় a এবং b একই স্ট্রিং অবজেক্ট "hello" রেফারেন্স করতে পারে, তাই a == b true ফেরত দিতে পারে। তবে, এই আচরণ জাভার স্ট্রিং লিটারাল অপ্টিমাইজেশন মেকানিজম (String Interning) এর উপর নির্ভরশীল।
স্ট্রিং লিটারাল বনাম new String()
জাভাতে, যখন একই স্ট্রিং লিটারাল একাধিকবার ব্যবহার করা হয়, JVM একই রেফারেন্স পুনরায় ব্যবহার করে মেমরি ব্যবহার অপ্টিমাইজ করে। এটি স্ট্রিং অবজেক্ট শেয়ার করে মেমরি দক্ষতা বাড়াতে করা হয়।
String s1 = "apple";
String s2 = "apple";
System.out.println(s1 == s2); // true (same literal, same reference)
অন্যদিকে, যখন আপনি new কীওয়ার্ড ব্যবহার করে স্পষ্টভাবে একটি স্ট্রিং তৈরি করেন, তখন একটি নতুন অবজেক্ট ভিন্ন রেফারেন্স সহ তৈরি হয়।
String s3 = new String("apple");
System.out.println(s1 == s3); // false (different references)
System.out.println(s1.equals(s3)); // true (same content)
এটি স্পষ্টভাবে পার্থক্য দেখায়: == রেফারেন্স সমতা পরীক্ষা করে, আর equals() বিষয়বস্তু সমতা পরীক্ষা করে। তাদের উদ্দেশ্য মৌলিকভাবে ভিন্ন।
স্ট্রিংগুলি অপরিবর্তনীয়
String এর আরেকটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল এটি অপরিবর্তনীয়। একবার String অবজেক্ট তৈরি হলে, তার বিষয়বস্তু পরিবর্তন করা যায় না।
উদাহরণস্বরূপ:
String original = "hello";
original = original + " world";
এটি হয়তো মূল স্ট্রিংটি পরিবর্তিত হচ্ছে বলে মনে হতে পারে, তবে বাস্তবে একটি নতুন String অবজেক্ট তৈরি হয় এবং original-এ পুনরায় অ্যাসাইন করা হয়।
এই অপরিবর্তনীয়তার কারণে, String অবজেক্টগুলি থ্রেড-সেফ এবং নিরাপত্তা ও ক্যাশ অপ্টিমাইজেশনে গুরুত্বপূর্ণ ভূমিকা পালন করে।
3. স্ট্রিং তুলনার পদ্ধতি
== অপারেটর দিয়ে রেফারেন্স তুলনা
== তুলনা করে স্ট্রিং অবজেক্টের রেফারেন্স (অ্যাড্রেস)। অন্য কথায়, বিষয়বস্তু একই হলেও, যদি অবজেক্টগুলো ভিন্ন হয় তবে এটি false রিটার্ন করে।
String a = "Java";
String b = new String("Java");
System.out.println(a == b); // false
এই উদাহরণে, a একটি লিটারাল এবং b new দিয়ে তৈরি, তাই তারা ভিন্ন অবজেক্টকে নির্দেশ করে এবং ফলাফল false হয়। সতর্ক থাকুন: এটি বিষয়বস্তু তুলনার জন্য উপযুক্ত নয়।
equals() দিয়ে বিষয়বস্তু তুলনা
equals() হল স্ট্রিং বিষয়বস্তু তুলনার সঠিক পদ্ধতি। অধিকাংশ ক্ষেত্রে, এই মেথডটি ব্যবহার করার পরামর্শ দেওয়া হয়।
String a = "Java";
String b = new String("Java");
System.out.println(a.equals(b)); // true
উপরের মতো, রেফারেন্সগুলো ভিন্ন হলেও, বিষয়বস্তু মিলে গেলে এটি true রিটার্ন করে।
null দিয়ে তুলনা করার সময় গুরুত্বপূর্ণ নোট
নিম্নলিখিত কোডটি NullPointerException ঘটাতে পারে।
String input = null;
System.out.println(input.equals("test")); // Exception!
এটি এড়াতে, constant.equals(variable) রূপে তুলনা লেখা সুপারিশ করা হয়।
System.out.println("test".equals(input)); // false (safe)
equalsIgnoreCase() দিয়ে কেস-ইনসেন্সিটিভ তুলনা
যদি আপনি কেস-ইনসেন্সিটিভ তুলনা করতে চান (যেমন, ইউজারনেম বা ইমেইল ঠিকানা), equalsIgnoreCase() সুবিধাজনক।
String a = "Hello";
String b = "hello";
System.out.println(a.equalsIgnoreCase(b)); // true
তবে, কিছু বিশেষ ইউনিকোড ক্ষেত্রে (যেমন তুর্কি অক্ষর “İ”) আচরণ অপ্রত্যাশিত হতে পারে, তাই আন্তর্জাতিকীকরণের জন্য অতিরিক্ত সতর্কতা প্রয়োজন।
compareTo() দিয়ে লেক্সিকোগ্রাফিক তুলনা
compareTo() দুটি স্ট্রিংকে লেক্সিকোগ্রাফিকভাবে (শব্দকোষের ক্রমে) তুলনা করে এবং নিম্নলিখিতভাবে একটি পূর্ণসংখ্যা রিটার্ন করে:
- 0: সমান
- ঋণাত্মক মান: কল করা স্ট্রিংটি প্রথমে আসে (ছোট)
- ধনাত্মক মান: কল করা স্ট্রিংটি পরে আসে (বড়)
String a = "apple"; String b = "banana"; System.out.println(a.compareTo(b)); // negative value ("apple" comes before "banana")
এটি প্রায়ই লেক্সিকোগ্রাফিক সাজানো ও ফিল্টারিংয়ের জন্য ব্যবহৃত হয়, এবং Collections.sort() ও TreeMap-এ কী তুলনার জন্য অভ্যন্তরীণভাবে ব্যবহার করা হয়।
৪. ব্যবহারিক উদাহরণ
ব্যবহারকারী ইনপুট যাচাই (লগইন ফাংশন)
সর্বাধিক সাধারণ ব্যবহারিক ক্ষেত্রে একটি ইউজারনেম বা পাসওয়ার্ড মিলে কিনা তা পরীক্ষা করা।
String inputUsername = "Naohiro";
String registeredUsername = "naohiro";
if (registeredUsername.equalsIgnoreCase(inputUsername)) {
System.out.println("Login successful");
} else {
System.out.println("Username does not match");
}
এই উদাহরণে যেমন, কেস-ইনসেন্সিটিভভাবে স্ট্রিং তুলনা করতে চাইলে equalsIgnoreCase() ব্যবহার করা উপযুক্ত।
তবে, পাসওয়ার্ড তুলনার ক্ষেত্রে সিকিউরিটি কারণে বড় ও ছোট অক্ষরকে ভিন্নভাবে বিবেচনা করা উচিত, তাই equals() ব্যবহার করুন।

ইনপুট ভ্যালিডেশন (ফর্ম হ্যান্ডলিং)
উদাহরণস্বরূপ, ড্রপডাউন বা টেক্সট বক্স থেকে প্রাপ্ত ইনপুট মান যাচাই করতে স্ট্রিং তুলনা ব্যবহার করা হয়।
String selectedOption = request.getParameter("plan");
if ("premium".equals(selectedOption)) {
System.out.println("You selected the Premium plan.");
} else {
System.out.println("You selected a different plan.");
}
প্র্যাকটিসে, "constant".equals(variable) প্যাটার্নটি নাল হ্যান্ডলিংসহ নিরাপদ তুলনা হিসেবে ব্যাপকভাবে ব্যবহৃত হয়। ব্যবহারকারীর ইনপুট সবসময় উপস্থিত নাও থাকতে পারে, তাই এই স্টাইলটি NullPointerException প্রতিরোধে সহায়তা করে।
একাধিক শর্তের ভিত্তিতে শাখা (সুইচ-সদৃশ লজিক)
একাধিক সম্ভাব্য স্ট্রিং মানের উপর ভিত্তি করে শাখা তৈরি করতে চাইলে, equals() তুলনা চেইন করা সাধারণ।
String cmd = args[0];
if ("start".equals(cmd)) {
startApp();
} else if ("stop".equals(cmd)) {
stopApp();
} else {
System.out.println("Invalid command");
}
Java 14 থেকে, স্ট্রিংয়ের জন্য switch স্টেটমেন্টও আনুষ্ঠানিকভাবে সমর্থিত।
switch (cmd) {
case "start":
startApp();
break;
case "stop":
stopApp();
break;
default:
System.out.println("Unknown command");
}
কারণ স্ট্রিং তুলনা সরাসরি শাখা লজিককে প্রভাবিত করে, একটি সঠিক বোঝাপড়া অপরিহার্য।
null-এর সাথে তুলনা করার কারণে সৃষ্ট বাগসমূহ এবং তাদের প্রতিরোধের উপায়
একটি সাধারণ ব্যর্থতার কেস হল যখন একটি অ্যাপ null মানের সাথে তুলনা করার কারণে ক্র্যাশ করে।
String keyword = null;
if (keyword.equals("search")) {
// Exception occurs: java.lang.NullPointerException
}
এই ধরনের ক্ষেত্রে, আপনি এভাবে লিখে নিরাপদে তুলনা করতে পারেন:
if ("search".equals(keyword)) {
System.out.println("Executing search");
}
বিকল্পভাবে, আপনি প্রথমে একটি কঠোর null চেক করতে পারেন।
if (keyword != null && keyword.equals("search")) {
System.out.println("Executing search");
}
Null-safe কোড লেখা একটি অপরিহার্য দক্ষতা শক্তিশালী অ্যাপ্লিকেশন তৈরির জন্য।
৫. পারফরম্যান্স এবং অপটিমাইজেশন
স্ট্রিং তুলনার প্রসেসিং খরচ
equals() এবং compareTo() সাধারণত ভালো অপটিমাইজড এবং দ্রুত। তবে, অভ্যন্তরীণভাবে তারা অক্ষরগুলোকে একে একে তুলনা করে, তাই দীর্ঘ স্ট্রিং বা বড় ডেটাসেটগুলো পারফরম্যান্সে প্রভাব ফেলতে পারে। বিশেষ করে, লুপের ভিতরে একই স্ট্রিংটি বারবার তুলনা করা অপ্রত্যাশিত পারফরম্যান্স হ্রাস ঘটাতে পারে।
for (String item : items) {
if (item.equals("keyword")) {
// Be careful if this comparison runs many times
}
}
String.intern() দিয়ে তুলনাগুলোকে দ্রুত করা
জাভা পদ্ধতি String.intern() একই কনটেন্টের স্ট্রিংগুলোকে JVM স্ট্রিং পুল-এ নিবন্ধন করে এবং তাদের রেফারেন্স শেয়ার করে। এটি ব্যবহার করে, == ব্যবহার করে তুলনা সম্ভব হতে পারে, যা নির্দিষ্ট পরিস্থিতিতে পারফরম্যান্স উপকারিতা প্রদান করতে পারে।
String a = new String("hello").intern();
String b = "hello";
System.out.println(a == b); // true
তবে, স্ট্রিং পুলের অতিরিক্ত ব্যবহার হিপ মেমরিতে চাপ বাড়াতে পারে, তাই এই পদ্ধতি সুনির্দিষ্ট ব্যবহারের ক্ষেত্রে সীমাবদ্ধ রাখা উচিত।
equalsIgnoreCase()-এর ফাঁদসমূহ এবং বিকল্পসমূহ
equalsIgnoreCase() সুবিধাজনক, কিন্তু এটি অভ্যন্তরীণভাবে কেস কনভার্সন করে, যা এটিকে equals()-এর চেয়ে সামান্য ব্যয়বহুল করে তোলে। পারফরম্যান্স-সংবেদনশীল পরিস্থিতিতে, স্ট্রিংগুলোকে অগ্রিম নরমালাইজ করে তারপর তুলনা করা প্রায়শই দ্রুত।
String input = userInput.toLowerCase();
if ("admin".equals(input)) {
// Optimized comparison
}
স্ট্রিংগুলোকে আগে নরমালাইজ করে এবং তারপর equals() ব্যবহার করে, আপনি তুলনার দক্ষতা উন্নত করতে পারেন।
StringBuilder / StringBuffer কে কার্যকরভাবে ব্যবহার করা
যখন বড় সংখ্যক স্ট্রিং কনক্যাটেনেশন জড়িত, String সরাসরি ব্যবহার করলে প্রতিবার নতুন অবজেক্ট তৈরি হয়, যা মেমরি এবং CPU ওভারহেড বাড়ায়। তুলনা লজিক জড়িত হলেও, সেরা অনুশীলন হল কনস্ট্রাকশনের জন্য StringBuilder ব্যবহার করা এবং তুলনার জন্য মানগুলোকে String হিসেবে রাখা।
StringBuilder sb = new StringBuilder();
sb.append("user_");
sb.append("123");
String result = sb.toString();
if (result.equals("user_123")) {
// Comparison logic
}
ক্যাশিং এবং প্রি-প্রসেসিং দিয়ে গতির জন্য ডিজাইন করা
যদি একই স্ট্রিং তুলনা বারবার ঘটে, তাহলে তুলনার ফলাফল ক্যাশ করা বা প্রি-প্রসেসিংয়ের জন্য ম্যাপ (যেমন HashMap) ব্যবহার করা কার্যকর হতে পারে যাতে তুলনার সংখ্যা কমানো যায়।
Map<String, Runnable> commandMap = new HashMap<>();
commandMap.put("start", () -> startApp());
commandMap.put("stop", () -> stopApp());
Runnable action = commandMap.get(inputCommand);
if (action != null) {
action.run();
}
এই পদ্ধতিতে, equals() ব্যবহার করে স্ট্রিং তুলনা একটি একক ম্যাপ লুকআপ দিয়ে প্রতিস্থাপিত হয়, যা উভয় পাঠযোগ্যতা এবং পারফরম্যান্স উন্নত করে।
৬. প্রায়শই জিজ্ঞাসিত প্রশ্ন (FAQ)
Q1. == এবং equals()-এর মধ্যে পার্থক্য কী?
A.
== রেফারেন্স তুলনা করে (অর্থাৎ, এটি পরীক্ষা করে যে দুটি ভেরিয়েবল একই মেমরি ঠিকানায় নির্দেশ করে কিনা)। এর বিপরীতে, equals() স্ট্রিংগুলোর প্রকৃত বিষয়বস্তু তুলনা করে।
String a = new String("abc");
String b = "abc";
System.out.println(a == b); // false (different references)
System.out.println(a.equals(b)); // true (same content)
সুতরাং, যখন আপনি স্ট্রিংয়ের বিষয়বস্তু তুলনা করতে চান, সবসময় equals() ব্যবহার করুন।
Q2. কেন equals() ব্যবহার করা কখনও কখনও নাল (null) এর কারণে ত্রুটি ঘটায়?
A.
null‑এ কোনো মেথড কল করলে NullPointerException ঘটে।
String input = null;
System.out.println(input.equals("test")); // Exception!
এই ত্রুটি এড়াতে, নিচের মতো একটি কনস্ট্যান্টে equals() কল করা নিরাপদ।
System.out.println("test".equals(input)); // false (safe)
Q3. কেস (বড়/ছোট অক্ষর) বিবেচনা না করে কীভাবে স্ট্রিং তুলনা করা যায়?
A.
বড় ও ছোট অক্ষরের পার্থক্য উপেক্ষা করতে equalsIgnoreCase() মেথড ব্যবহার করুন।
String a = "Hello";
String b = "hello";
System.out.println(a.equalsIgnoreCase(b)); // true
তবে, পূর্ণ‑প্রস্থের অক্ষর বা কিছু বিশেষ ইউনিকোড অক্ষরের ক্ষেত্রে ফলাফল সবসময় প্রত্যাশিত নাও হতে পারে।
Q4. সাজানো (লেক্সিকোগ্রাফিক) ক্রমে স্ট্রিং কীভাবে তুলনা করবেন?
A.
স্ট্রিংয়ের লেক্সিকোগ্রাফিক ক্রম পরীক্ষা করতে চাইলে compareTo() ব্যবহার করুন।
String a = "apple";
String b = "banana";
System.out.println(a.compareTo(b)); // negative value ("apple" comes before "banana")
রিটার্ন মানের অর্থ:
- 0 → সমান
- ঋণাত্মক মান → বাম দিকের স্ট্রিং প্রথমে আসে
- ধনাত্মক মান → বাম দিকের স্ট্রিং পরে আসে
এই মেথডটি সাধারণত সাজানোর অপারেশনে ব্যবহার হয়।
Q5. স্ট্রিং তুলনার সেরা অনুশীলনগুলো কী?
A.
- সবসময় বিষয়বস্তু তুলনা এর জন্য
equals()ব্যবহার করুন - null নিরাপত্তা নিশ্চিত করতে
"constant".equals(variable)ব্যবহার করুন - কেস‑ইনসেনসিটিভ তুলনা এর জন্য
equalsIgnoreCase()ব্যবহার করুন অথবাtoLowerCase()/toUpperCase()দিয়ে স্বাভাবিক করুন - বৃহৎ‑পরিসর বা পারফরম্যান্স‑সংবেদনশীল তুলনা এর জন্য
intern()বা ক্যাশিং কৌশল বিবেচনা করুন - সবসময় পাঠযোগ্যতা এবং নিরাপত্তা এর মধ্যে সমতা বজায় রাখুন
7. উপসংহার
জাভাতে স্ট্রিং তুলনার সঠিক পদ্ধতি নির্বাচন করা অত্যন্ত গুরুত্বপূর্ণ
এই প্রবন্ধে, আমরা জাভাতে স্ট্রিং তুলনা সম্পর্কে মৌলিক বিষয় থেকে ব্যবহারিক উদাহরণ এবং পারফরম্যান্স বিবেচনা পর্যন্ত আলোচনা করেছি। যেহেতু String জাভায় একটি রেফারেন্স টাইপ, ভুল তুলনা পদ্ধতি ব্যবহার করলে সহজেই অনিচ্ছাকৃত আচরণ ঘটতে পারে।
বিশেষত, == এবং equals() এর পার্থক্য নবীনদের জন্য প্রথমে বিভ্রান্তিকর বিষয়গুলোর একটি। এই পার্থক্যটি বোঝা এবং প্রতিটি মেথড যথাযথভাবে ব্যবহার করা নিরাপদ ও নির্ভরযোগ্য কোড লেখার জন্য অপরিহার্য।
এই প্রবন্ধে আপনি যা শিখেছেন (চেকলিস্ট)
==রেফারেন্স (মেমরি ঠিকানা) তুলনা করেequals()স্ট্রিং বিষয়বস্তু তুলনা করে এবং এটি সবচেয়ে নিরাপদ বিকল্পequalsIgnoreCase()কেস‑ইনসেনসিটিভ তুলনা সম্ভব করেcompareTo()লেক্সিকোগ্রাফিক স্ট্রিং তুলনা সক্ষম করে"constant".equals(variable)নাল‑সেফ তুলনা প্রদান করে- পারফরম্যান্স‑সংবেদনশীল ক্ষেত্রে,
intern()এবং ক্যাশিং কৌশল কার্যকর হতে পারে
বাস্তব জগতে ডেভেলপমেন্টে স্ট্রিং তুলনা জ্ঞান যা ফলপ্রসূ
লগইন যাচাই, ইনপুট যাচাই, ডেটাবেস অনুসন্ধান এবং শর্তাধীন শাখা ইত্যাদি দৈনন্দিন ডেভেলপমেন্ট কাজগুলোতে স্ট্রিং তুলনা গুরুত্বপূর্ণ ভূমিকা পালন করে। এই ধারণাগুলো ভালভাবে বুঝে আপনি বাগ প্রতিরোধ করতে এবং আপনার কোডকে ঠিক যেমন চাওয়া হয়েছে তেমন আচরণ নিশ্চিত করতে পারেন।
যখনই আপনি স্ট্রিং নিয়ে কাজ করা কোড লিখবেন, এই প্রবন্ধে উল্লেখিত নীতিগুলো পুনরায় দেখুন এবং আপনার উদ্দেশ্যের সাথে সর্বোত্তম মানানসই তুলনা পদ্ধতি নির্বাচন করুন।


