Java তে String হলো একটি অবজেক্ট যা চিহ্নিত করে একটি চরিত্রের সিকোয়েন্স। String ক্লাসটি Java তে অনেক গুরুত্বপূর্ণ এবং এটি বিভিন্ন ধরণের স্ট্রিং অপারেশন যেমন স্ট্রিং কনক্যাটেনেশন, সাবস্ট্রিং এক্সট্র্যাকশন, কম্প্যারিজন ইত্যাদি পরিচালনা করতে সহায়তা করে।
Java String Examples:
1. String Declaration and Initialization:
public class StringExample {
public static void main(String[] args) {
// String Declaration
String str1 = "Hello, World!";
String str2 = new String("Java Programming");
System.out.println(str1); // Output: Hello, World!
System.out.println(str2); // Output: Java Programming
}
}
Output:
Hello, World!
Java Programming
2. String Concatenation:
String গুলিকে একত্রিত করতে + অপারেটর বা concat() মেথড ব্যবহার করা হয়।
public class StringConcatenation {
public static void main(String[] args) {
String str1 = "Java";
String str2 = " Programming";
// Using + operator
String result1 = str1 + str2;
System.out.println(result1); // Output: Java Programming
// Using concat() method
String result2 = str1.concat(str2);
System.out.println(result2); // Output: Java Programming
}
}
Output:
Java Programming
Java Programming
3. String Length:
length() মেথড ব্যবহার করে স্ট্রিংয়ের দৈর্ঘ্য (কেমন সংখ্যা) বের করা হয়।
public class StringLength {
public static void main(String[] args) {
String str = "Hello, World!";
int length = str.length();
System.out.println("Length of the string: " + length); // Output: 13
}
}
Output:
Length of the string: 13
4. Substring Extraction:
substring() মেথড ব্যবহার করে একটি স্ট্রিংয়ের একটি নির্দিষ্ট অংশ বের করা যায়।
public class SubstringExample {
public static void main(String[] args) {
String str = "Java Programming";
// Extracting substring from index 5 to 15
String substr = str.substring(5, 15);
System.out.println(substr); // Output: Programming
}
}
Output:
Programming
5. String Comparison:
equals() এবং equalsIgnoreCase() মেথড ব্যবহার করে স্ট্রিং তুলনা করা যায়। equals() বড়-ছোট হাতের পার্থক্য চেক করে, আর equalsIgnoreCase() সেটা উপেক্ষা করে।
public class StringComparison {
public static void main(String[] args) {
String str1 = "Java";
String str2 = "java";
// Case-sensitive comparison
System.out.println(str1.equals(str2)); // Output: false
// Case-insensitive comparison
System.out.println(str1.equalsIgnoreCase(str2)); // Output: true
}
}
Output:
false
true
6. String to Uppercase and Lowercase:
toUpperCase() এবং toLowerCase() মেথড ব্যবহার করে স্ট্রিংয়ের সমস্ত অক্ষরকে বড় হাতের বা ছোট হাতের অক্ষরে রূপান্তর করা যায়।
public class StringCaseConversion {
public static void main(String[] args) {
String str = "Java Programming";
// Convert to uppercase
String upperStr = str.toUpperCase();
System.out.println(upperStr); // Output: JAVA PROGRAMMING
// Convert to lowercase
String lowerStr = str.toLowerCase();
System.out.println(lowerStr); // Output: java programming
}
}
Output:
JAVA PROGRAMMING
java programming
7. String Trimming:
trim() মেথড ব্যবহার করে স্ট্রিংয়ের আগে এবং পরে থাকা ফাঁকা স্থান (whitespace) মুছে ফেলা যায়।
public class StringTrim {
public static void main(String[] args) {
String str = " Hello, World! ";
// Trim the whitespace
String trimmedStr = str.trim();
System.out.println(trimmedStr); // Output: Hello, World!
}
}
Output:
Hello, World!
8. String Split:
split() মেথড ব্যবহার করে একটি স্ট্রিংকে নির্দিষ্ট একটি ডেলিমিটার বা ক্যারেক্টার দিয়ে বিভক্ত করা যায়।
public class StringSplit {
public static void main(String[] args) {
String str = "Java,Python,C++,JavaScript";
// Split by comma
String[] languages = str.split(",");
// Print the individual strings
for (String language : languages) {
System.out.println(language);
}
}
}
Output:
Java
Python
C++
JavaScript
9. String Search:
indexOf() মেথড ব্যবহার করে একটি স্ট্রিংয়ের মধ্যে কোনো নির্দিষ্ট ক্যারেক্টার বা সাবস্ট্রিং খুঁজে বের করা যায়।
public class StringSearch {
public static void main(String[] args) {
String str = "Java Programming";
// Find the index of 'P'
int index = str.indexOf('P');
System.out.println("Index of P: " + index); // Output: 5
// Find the index of a substring
int subIndex = str.indexOf("Pro");
System.out.println("Index of 'Pro': " + subIndex); // Output: 5
}
}
Output:
Index of P: 5
Index of 'Pro': 5
10. String Replace:
replace() মেথড ব্যবহার করে একটি স্ট্রিংয়ের একটি অংশকে অন্য একটি অংশে পরিবর্তন করা যায়।
public class StringReplace {
public static void main(String[] args) {
String str = "Java Programming";
// Replace "Java" with "Python"
String newStr = str.replace("Java", "Python");
System.out.println(newStr); // Output: Python Programming
}
}
Output:
Python Programming
Java তে String ক্লাস একটি অত্যন্ত শক্তিশালী এবং বহুল ব্যবহৃত ক্লাস যা স্ট্রিং ম্যানিপুলেশন সম্পর্কিত বিভিন্ন কার্যকরী ফাংশন প্রদান করে। এখানে বিভিন্ন ধরনের String অপারেশন যেমন কনক্যাটেনেশন, সাবস্ট্রিং, তুলনা, কেস কনভার্সন, স্প্লিট, রেপ্লেস ইত্যাদি নিয়ে আলোচনা করা হয়েছে। এগুলি স্ট্রিং ম্যানিপুলেশনকে আরও সহজ এবং কার্যকরী করে তোলে।
Java তে String Manipulation হল এক গুরুত্বপূর্ণ কাজ যা স্ট্রিংয়ের বিভিন্ন কাজের জন্য ব্যবহৃত হয়। String Concatenation, String Length, এবং Substring হল স্ট্রিং ম্যানিপুলেশনের তিনটি সাধারণ এবং গুরুত্বপূর্ণ অপারেশন। এখানে আমরা এই তিনটি অপারেশন কিভাবে ব্যবহার করা যায় তা উদাহরণের মাধ্যমে দেখব।
1. String Concatenation (স্ট্রিং যোগ করা):
String Concatenation এর মাধ্যমে দুটি বা একাধিক স্ট্রিং একত্রিত (join) করা হয়। Java তে এটি করা যেতে পারে + অপারেটর অথবা concat() মেথড ব্যবহার করে।
উদাহরণ 1: String Concatenation + অপারেটর ব্যবহার করে:
public class StringConcatenation {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "World";
// + অপারেটর ব্যবহার করে স্ট্রিং যোগ করা
String result = str1 + " " + str2;
System.out.println("Concatenated String: " + result);
}
}
Output:
Concatenated String: Hello World
উদাহরণ 2: concat() মেথড ব্যবহার করে:
public class StringConcatenation {
public static void main(String[] args) {
String str1 = "Java";
String str2 = "Programming";
// concat() মেথড ব্যবহার করে স্ট্রিং যোগ করা
String result = str1.concat(" ").concat(str2);
System.out.println("Concatenated String: " + result);
}
}
Output:
Concatenated String: Java Programming
2. String Length (স্ট্রিং এর দৈর্ঘ্য):
length() মেথডটি একটি স্ট্রিং এর দৈর্ঘ্য (অক্ষরের সংখ্যা) ফেরত দেয়।
উদাহরণ 3: String Length নির্ণয় করা:
public class StringLength {
public static void main(String[] args) {
String str = "Hello, Java!";
// length() মেথড ব্যবহার করে স্ট্রিং এর দৈর্ঘ্য পাওয়া
int length = str.length();
System.out.println("The length of the string is: " + length);
}
}
Output:
The length of the string is: 13
3. Substring (স্ট্রিংয়ের অংশ বের করা):
substring() মেথডটি একটি স্ট্রিং এর নির্দিষ্ট অংশ বের করতে ব্যবহৃত হয়। এটি দুটি ফর্মে ব্যবহৃত হতে পারে:
substring(int startIndex): এটি শুরু সূচক থেকে শেষ পর্যন্ত স্ট্রিংয়ের অংশ বের করে।substring(int startIndex, int endIndex): এটি শুরু সূচক থেকে শেষ সূচক পর্যন্ত স্ট্রিংয়ের অংশ বের করে।
উদাহরণ 4: substring() মেথড ব্যবহার করে স্ট্রিং এর অংশ বের করা:
public class StringSubstring {
public static void main(String[] args) {
String str = "Java Programming";
// substring() মেথড ব্যবহার করে স্ট্রিং এর অংশ বের করা
String subStr1 = str.substring(5); // "Programming"
String subStr2 = str.substring(0, 4); // "Java"
System.out.println("Substring from index 5: " + subStr1);
System.out.println("Substring from index 0 to 4: " + subStr2);
}
}
Output:
Substring from index 5: Programming
Substring from index 0 to 4: Java
- String Concatenation:
- স্ট্রিং যোগ করতে
+অপারেটর বাconcat()মেথড ব্যবহার করা যায়। - এটি দুটি বা একাধিক স্ট্রিংকে একত্রিত করার জন্য ব্যবহৃত হয়।
- স্ট্রিং যোগ করতে
- String Length:
length()মেথডটি একটি স্ট্রিংয়ের দৈর্ঘ্য ফেরত দেয় (অর্থাৎ, স্ট্রিংয়ের মধ্যে কতটি অক্ষর রয়েছে)।
- Substring:
substring()মেথডটি স্ট্রিংয়ের নির্দিষ্ট অংশ বের করার জন্য ব্যবহৃত হয়। এটি একটি স্ট্রিংয়ের মধ্যে শুরু এবং শেষ সূচকের মধ্যে থাকা অক্ষরগুলি রিটার্ন করে।
এই তিনটি অপারেশন Java তে স্ট্রিং ম্যানিপুলেশনের জন্য অত্যন্ত সাধারণ এবং গুরুত্বপূর্ণ।
Java তে String comparison করতে দুটি সাধারণ মেথড রয়েছে: equals() এবং compareTo(). এই দুটি মেথড ব্যবহার করে আপনি দুটি স্ট্রিংয়ের মধ্যে সমতা (equality) এবং তুলনা (ordering) পরীক্ষা করতে পারেন। নিচে String comparison এর জন্য দুটি মেথডের ব্যবহারের উদাহরণ দেয়া হলো।
1. equals() মেথড:
equals() মেথডটি দুটি স্ট্রিংয়ের মানের তুলনা করে। এটি case-sensitive তুলনা করে, অর্থাৎ বড় হাতের এবং ছোট হাতের অক্ষরকে আলাদা ভাবে দেখে।
Example: String Comparison using equals()
public class StringComparisonExample {
public static void main(String[] args) {
String str1 = "Java";
String str2 = "java";
String str3 = "Java";
// equals() method is case-sensitive
System.out.println("str1 equals str2: " + str1.equals(str2)); // false
System.out.println("str1 equals str3: " + str1.equals(str3)); // true
}
}
Explanation:
str1.equals(str2)→ এখানে,"Java"এবং"java"এর মধ্যে পার্থক্য রয়েছে (case-sensitive), তাই এটিfalseরিটার্ন করবে।str1.equals(str3)→ এখানে"Java"এবং"Java"দুটি স্ট্রিংয়ের মধ্যে কোন পার্থক্য নেই, তাই এটিtrueরিটার্ন করবে।
2. compareTo() মেথড:
compareTo() মেথডটি দুটি স্ট্রিংয়ের lexicographical (alphabetical) তুলনা করে এবং integer value ফেরত দেয়:
- যদি প্রথম স্ট্রিংটি দ্বিতীয় স্ট্রিংয়ের চেয়ে ছোট হয়, তাহলে এটি negative integer রিটার্ন করবে।
- যদি প্রথম স্ট্রিংটি দ্বিতীয় স্ট্রিংয়ের চেয়ে বড় হয়, তাহলে এটি positive integer রিটার্ন করবে।
- যদি দুটি স্ট্রিং সমান হয়, তাহলে এটি 0 রিটার্ন করবে।
Example: String Comparison using compareTo()
public class CompareToExample {
public static void main(String[] args) {
String str1 = "Apple";
String str2 = "Banana";
String str3 = "Apple";
// compareTo() method performs lexicographical comparison
System.out.println("str1 compareTo str2: " + str1.compareTo(str2)); // negative value
System.out.println("str1 compareTo str3: " + str1.compareTo(str3)); // 0
System.out.println("str2 compareTo str1: " + str2.compareTo(str1)); // positive value
}
}
Explanation:
str1.compareTo(str2)→"Apple"এবং"Banana"এর মধ্যে lexicographical তুলনা করা হয়। যেহেতু "Apple" "Banana" এর চেয়ে ছোট (alphabetically first), এটি একটি negative value (যেমন -1) রিটার্ন করবে।str1.compareTo(str3)→"Apple"এবং"Apple"দুটি স্ট্রিং একসমান, তাই এটি 0 রিটার্ন করবে।str2.compareTo(str1)→"Banana"এবং"Apple"এর মধ্যে lexicographical তুলনা, যেহেতু "Banana" "Apple" এর চেয়ে বড়, তাই এটি একটি positive value (যেমন 1) রিটার্ন করবে।
3. Case-insensitive Comparison:
যদি আপনি স্ট্রিংয়ের তুলনা করতে চান এবং ক্যাসে (case) ভিন্নতা উপেক্ষা করতে চান, তবে equalsIgnoreCase() এবং compareToIgnoreCase() মেথড ব্যবহার করতে পারেন।
Example: Case-insensitive comparison
public class CaseInsensitiveExample {
public static void main(String[] args) {
String str1 = "java";
String str2 = "Java";
// equalsIgnoreCase() method is case-insensitive
System.out.println("str1 equalsIgnoreCase str2: " + str1.equalsIgnoreCase(str2)); // true
// compareToIgnoreCase() method is case-insensitive
System.out.println("str1 compareToIgnoreCase str2: " + str1.compareToIgnoreCase(str2)); // 0
}
}
Explanation:
str1.equalsIgnoreCase(str2)→ এখানেequalsIgnoreCase()মেথডটি স্ট্রিংয়ের ক্যাসে ভিন্নতা উপেক্ষা করে তুলনা করবে এবং true রিটার্ন করবে।str1.compareToIgnoreCase(str2)→ এখানেcompareToIgnoreCase()মেথডটি ক্যাসে ভিন্নতা উপেক্ষা করে lexicographical তুলনা করবে এবং 0 রিটার্ন করবে, কারণ স্ট্রিং দুটি সমান।
Summary of String Comparison Methods:
| Method | Description | Example Output |
|---|---|---|
equals(String other) | Compares two strings for equality (case-sensitive). | true or false |
compareTo(String other) | Compares two strings lexicographically (case-sensitive). | Positive, negative, or 0 |
equalsIgnoreCase(String other) | Compares two strings for equality (case-insensitive). | true or false |
compareToIgnoreCase(String other) | Compares two strings lexicographically (case-insensitive). | Positive, negative, or 0 |
equals()মেথডটি case-sensitive স্ট্রিং তুলনা করে এবংcompareTo()মেথডটি স্ট্রিংগুলির lexicographical order পরীক্ষা করে।equalsIgnoreCase()এবংcompareToIgnoreCase()মেথডগুলো case-insensitive তুলনা করতে ব্যবহৃত হয়।- এই মেথডগুলি ব্যবহার করে Java তে স্ট্রিং তুলনা সহজে এবং কার্যকরীভাবে করা যায়।
Java StringBuffer এবং StringBuilder দুটি ক্লাস, যা mutable strings তৈরি করতে ব্যবহৃত হয়। মানে, আপনি একে পরিবর্তন (modify) করতে পারেন। সাধারণভাবে, String ক্লাস একটি immutable ক্লাস, যার মানে হল যে একবার একটি String অবজেক্ট তৈরি হলে, সেটির মান পরিবর্তন করা সম্ভব নয়। কিন্তু StringBuffer এবং StringBuilder এর মাধ্যমে আপনি একটি স্ট্রিংয়ের মান পরিবর্তন করতে পারেন। তারা অনেক কার্যকরী যখন বার বার স্ট্রিং পরিবর্তন করা হয়, কারণ এতে memory overhead কম থাকে এবং কার্যকারিতা বেশি হয়।
StringBuffer এবং StringBuilder এর মধ্যে পার্থক্য:
- StringBuffer: এটি সিঙ্ক্রোনাইজড, অর্থাৎ একাধিক থ্রেড একে একযোগে অ্যাক্সেস করতে পারবে না। এটি thread-safe, কিন্তু এর কার্যক্ষমতা কিছুটা কম হতে পারে যখন আপনি একাধিক থ্রেড ব্যবহার করেন।
- StringBuilder: এটি সিঙ্ক্রোনাইজড নয়, অর্থাৎ একাধিক থ্রেড একে একযোগে অ্যাক্সেস করলে এটি নিরাপদ নাও হতে পারে। তবে, এটি সাধারণত ফাস্ট, কারণ এটি অতিরিক্ত সিঙ্ক্রোনাইজেশন চেকের প্রয়োজন হয় না।
StringBuffer এবং StringBuilder Example:
1. StringBuffer Example:
public class StringBufferExample {
public static void main(String[] args) {
// StringBuffer ব্যবহার
StringBuffer sb = new StringBuffer("Hello");
// StringBuffer এ কিছু পরিবর্তন করা
sb.append(" World!"); // স্ট্রিং এর শেষে নতুন টেক্সট যোগ করা
System.out.println("After append: " + sb);
sb.insert(5, ","); // স্ট্রিং এর মধ্যে কমা ইনসার্ট করা
System.out.println("After insert: " + sb);
sb.replace(6, 11, "Java"); // 6 থেকে 11 পর্যন্ত অংশ বদলে "Java" সেট করা
System.out.println("After replace: " + sb);
sb.delete(5, 6); // কমা মুছে ফেলা
System.out.println("After delete: " + sb);
sb.reverse(); // স্ট্রিংটি উল্টানো
System.out.println("After reverse: " + sb);
}
}
Output:
After append: Hello World!
After insert: Hello, World!
After replace: Hello, Java!
After delete: Hello Java!
After reverse: !avaJ olleH
Code Explanation:
- append(): এটি স্ট্রিংয়ের শেষে নতুন ডেটা যোগ করে।
- insert(): এটি স্ট্রিংয়ের নির্দিষ্ট অবস্থানে নতুন ডেটা যোগ করে।
- replace(): এটি স্ট্রিংয়ের একটি অংশকে অন্য অংশ দিয়ে প্রতিস্থাপন করে।
- delete(): এটি স্ট্রিংয়ের নির্দিষ্ট একটি অংশ মুছে দেয়।
- reverse(): এটি স্ট্রিংটি উল্টে দেয়।
2. StringBuilder Example:
public class StringBuilderExample {
public static void main(String[] args) {
// StringBuilder ব্যবহার
StringBuilder sb = new StringBuilder("Good");
// StringBuilder এ কিছু পরিবর্তন করা
sb.append(" Morning!"); // স্ট্রিং এর শেষে নতুন টেক্সট যোগ করা
System.out.println("After append: " + sb);
sb.insert(4, ","); // স্ট্রিং এর মধ্যে কমা ইনসার্ট করা
System.out.println("After insert: " + sb);
sb.replace(5, 9, "Evening"); // 5 থেকে 9 পর্যন্ত অংশ বদলে "Evening" সেট করা
System.out.println("After replace: " + sb);
sb.delete(4, 5); // কমা মুছে ফেলা
System.out.println("After delete: " + sb);
sb.reverse(); // স্ট্রিংটি উল্টানো
System.out.println("After reverse: " + sb);
}
}
Output:
After append: Good Morning!
After insert: Good, Morning!
After replace: Good, Evening!
After delete: Good Evening!
After reverse: !gninE dooG
Code Explanation:
- append():
StringBuilderএ টেক্সট যোগ করার জন্য ব্যবহৃত হয়। - insert(): নির্দিষ্ট একটি অবস্থানে নতুন টেক্সট ইনসার্ট করতে ব্যবহৃত হয়।
- replace(): নির্দিষ্ট একটি অংশে পরিবর্তন করতে ব্যবহৃত হয়।
- delete(): নির্দিষ্ট একটি অংশ মুছে ফেলার জন্য ব্যবহৃত হয়।
- reverse(): টেক্সট উল্টানোর জন্য ব্যবহৃত হয়।
StringBuffer vs StringBuilder:
- StringBuffer সাধারণত সিঙ্ক্রোনাইজড এবং থ্রেড-সেফ, তবে এটি কিছুটা ধীর হতে পারে কারণ সিঙ্ক্রোনাইজেশন প্রয়োগ করা হয়।
- StringBuilder সিঙ্ক্রোনাইজড নয়, তবে এটি কম সময়ে কাজ করে যদি একক থ্রেড ব্যবহার করা হয়, কারণ সিঙ্ক্রোনাইজেশন ট্যাক্স না থাকে।
When to Use StringBuffer and StringBuilder:
- Thread-Safety Required: যদি আপনি একটি মাল্টি-থ্রেডেড পরিবেশে কাজ করছেন যেখানে একাধিক থ্রেড একই
StringBufferঅবজেক্টে অ্যাক্সেস করতে পারে, তবে StringBuffer ব্যবহার করুন। - Single-threaded Environment: যদি আপনি শুধুমাত্র এক থ্রেড ব্যবহার করছেন, তবে StringBuilder ব্যবহার করা উচিত কারণ এটি দ্রুত কাজ করে এবং কম মেমরি ব্যবহার করে।
- StringBuffer এবং StringBuilder উভয়ই mutable strings তৈরি করতে ব্যবহৃত হয়।
StringBufferথ্রেড-সেফ, কিন্তু StringBuilder কম সময়ে কার্যকরী, বিশেষত একক থ্রেডের জন্য।- এগুলি memory efficiency এবং performance উন্নত করতে ব্যবহৃত হয়, বিশেষত যখন একটি স্ট্রিং বার বার পরিবর্তন করতে হয়।
Palindrome String একটি স্ট্রিং যা সামনে থেকে পড়লে এবং পিছন থেকে পড়লেও একই থাকে। যেমন "madam", "racecar" ইত্যাদি।
Java তে একটি স্ট্রিং প্যালিনড্রোম কিনা তা যাচাই করতে আমরা বেশ কয়েকটি পদ্ধতি ব্যবহার করতে পারি। নিচে কয়েকটি উদাহরণ দেয়া হলো যেগুলি দিয়ে একটি স্ট্রিং প্যালিনড্রোম কিনা তা যাচাই করা যেতে পারে।
Palindrome String Check Example:
1. Using StringBuilder for Reverse Comparison:
এখানে StringBuilder এর reverse() মেথড ব্যবহার করা হয়েছে। আমরা স্ট্রিংটি উল্টানো এবং মূল স্ট্রিংয়ের সাথে তুলনা করছি।
public class PalindromeExample {
public static void main(String[] args) {
String str = "madam"; // স্ট্রিংটি চেক করতে হবে
// StringBuilder ব্যবহার করে প্যালিনড্রোম চেক করা
StringBuilder reversedStr = new StringBuilder(str);
reversedStr.reverse(); // স্ট্রিংটি উল্টানো
if (str.equals(reversedStr.toString())) {
System.out.println(str + " is a Palindrome.");
} else {
System.out.println(str + " is not a Palindrome.");
}
}
}
Output:
madam is a Palindrome.
Code Explanation:
- StringBuilder.reverse(): স্ট্রিংটি উল্টানোর জন্য
StringBuilderএরreverse()মেথড ব্যবহার করা হয়েছে। - equals() method: তারপর উল্টানো স্ট্রিংটি মূল স্ট্রিংয়ের সাথে তুলনা করা হয়েছে।
2. Using Loop to Compare Characters:
এখানে একটি লুপ ব্যবহার করে স্ট্রিংয়ের প্রথম এবং শেষ অক্ষর তুলনা করা হচ্ছে। যদি সব অক্ষর মিলিত হয়, তবে এটি প্যালিনড্রোম হবে।
public class PalindromeExample {
public static void main(String[] args) {
String str = "racecar"; // স্ট্রিংটি চেক করতে হবে
boolean isPalindrome = true; // প্যালিনড্রোম কিনা তা ট্র্যাক করা
int left = 0; // প্রথম অক্ষর
int right = str.length() - 1; // শেষ অক্ষর
// স্ট্রিংয়ের প্রথম এবং শেষ অক্ষর তুলনা
while (left < right) {
if (str.charAt(left) != str.charAt(right)) {
isPalindrome = false;
break;
}
left++;
right--;
}
if (isPalindrome) {
System.out.println(str + " is a Palindrome.");
} else {
System.out.println(str + " is not a Palindrome.");
}
}
}
Output:
racecar is a Palindrome.
Code Explanation:
- Two pointers (left and right): দুটি পয়েন্টার ব্যবহার করা হয়েছে—একটি শুরুতে (left) এবং আরেকটি শেষের দিকে (right)।
- Comparison: লুপের মধ্যে প্রথম এবং শেষ অক্ষর তুলনা করা হচ্ছে, এবং যদি কোনো অক্ষর মিলে না যায়, তাহলে এটি প্যালিনড্রোম নয় বলে ধরা হচ্ছে।
- Loop: পয়েন্টারগুলোকে আপডেট করে চেক করা হচ্ছে যতক্ষণ না তারা একে অপরকে অতিক্রম করে।
3. Using Recursion:
একটি রিকর্শনাল পদ্ধতি ব্যবহার করে স্ট্রিং প্যালিনড্রোম কিনা তা যাচাই করা।
public class PalindromeExample {
public static void main(String[] args) {
String str = "madam";
if (isPalindrome(str, 0, str.length() - 1)) {
System.out.println(str + " is a Palindrome.");
} else {
System.out.println(str + " is not a Palindrome.");
}
}
// Recursion method to check palindrome
public static boolean isPalindrome(String str, int left, int right) {
if (left >= right) {
return true;
}
if (str.charAt(left) != str.charAt(right)) {
return false;
}
return isPalindrome(str, left + 1, right - 1);
}
}
Output:
madam is a Palindrome.
Code Explanation:
- Recursive Function:
isPalindrome()ফাংশনটি স্ট্রিংয়ের প্রথম এবং শেষ অক্ষর তুলনা করে, যদি তারা সমান হয়, তাহলে এটি পরবর্তী চরিত্রগুলো চেক করতে রিকর্শন কল করে। - Base Case: যদি
leftএবংrightইন্ডেক্স একে অপরকে অতিক্রম করে (অথবা সমান হয়), তখন এটি সত্য মানে ফিরে আসে, যা প্যালিনড্রোম হওয়া প্রমাণ করে।
**4. Using Stack for Palindrome Check:
একটি স্ট্যাক ব্যবহার করে প্যালিনড্রোম চেক করা।
import java.util.Stack;
public class PalindromeExample {
public static void main(String[] args) {
String str = "level";
if (isPalindromeUsingStack(str)) {
System.out.println(str + " is a Palindrome.");
} else {
System.out.println(str + " is not a Palindrome.");
}
}
// Using Stack to check palindrome
public static boolean isPalindromeUsingStack(String str) {
Stack<Character> stack = new Stack<>();
// Push all characters of string onto the stack
for (int i = 0; i < str.length(); i++) {
stack.push(str.charAt(i));
}
// Compare characters from stack with the string
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) != stack.pop()) {
return false;
}
}
return true;
}
}
Output:
level is a Palindrome.
Code Explanation:
- Using Stack: একটি স্ট্যাক ব্যবহার করে, আমরা স্ট্রিংয়ের প্রতিটি চরিত্র স্ট্যাকে রাখতে পারি।
- Pop Operation: তারপর স্ট্যাক থেকে পপ করে স্ট্রিংয়ের অক্ষরের সাথে তুলনা করা হয়। যদি কোন অক্ষর মিলে না যায়, এটি প্যালিনড্রোম নয়।
- Palindrome Checking: বিভিন্ন পদ্ধতি ব্যবহার করে স্ট্রিং প্যালিনড্রোম কিনা তা যাচাই করা সম্ভব।
- Efficiency: পদ্ধতির মধ্যে পারফরম্যান্স পার্থক্য থাকতে পারে, যেমন রিকার্সিভ পদ্ধতি বা স্ট্যাক ব্যবহারে অতিরিক্ত স্পেস প্রয়োজন হতে পারে।
- Practical Application: প্যালিনড্রোম চেকিং বিভিন্ন সিচুয়েশন যেমন ডাটা ভ্যালিডেশন, অ্যালগরিদমে ব্যবহৃত হয়।
Java String Reverse Example: String কে উল্টো করে দেখানোর জন্য Java তে বেশ কয়েকটি পদ্ধতি রয়েছে। এখানে আমরা কিছু জনপ্রিয় পদ্ধতির উদাহরণ দেখাবো যা দিয়ে একটি String কে উল্টো (reverse) করা যায়।
Method 1: Using StringBuilder or StringBuffer
Java তে StringBuilder এবং StringBuffer ক্লাসে reverse() মেথড রয়েছে, যা খুব সহজে একটি স্ট্রিংকে উল্টো করে দিতে পারে। এই পদ্ধতিটি সাধারণত mutability এর কারণে দ্রুত এবং কার্যকরী।
Example: Using StringBuilder
public class StringReverseExample {
public static void main(String[] args) {
String original = "Hello, World!";
// StringBuilder ব্যবহার করে String উল্টো করা
StringBuilder reversed = new StringBuilder(original);
reversed.reverse();
System.out.println("Original String: " + original);
System.out.println("Reversed String: " + reversed);
}
}
Output:
Original String: Hello, World!
Reversed String: !dlroW ,olleH
Explanation:
- এখানে
StringBuilderক্লাসেরreverse()মেথড ব্যবহার করা হয়েছে, যাoriginalস্ট্রিংটি উল্টো করে নতুনStringBuilderঅবজেক্টে স্টোর করে।
Method 2: Using a for Loop
আপনি একটি সাধারণ for লুপ ব্যবহার করে স্ট্রিংয়ের প্রতিটি চরিত্রকে উল্টো অবস্থানে বসিয়ে একটি নতুন স্ট্রিং তৈরি করতে পারেন।
Example: Using for Loop
public class StringReverseExample {
public static void main(String[] args) {
String original = "Hello, World!";
String reversed = "";
// String কে উল্টো করার জন্য for loop ব্যবহার
for (int i = original.length() - 1; i >= 0; i--) {
reversed += original.charAt(i);
}
System.out.println("Original String: " + original);
System.out.println("Reversed String: " + reversed);
}
}
Output:
Original String: Hello, World!
Reversed String: !dlroW ,olleH
Explanation:
original.length() - 1থেকে শুরু করে, প্রতিটি অক্ষরকে উল্টো করেreversedস্ট্রিংয়ে অ্যাড করা হয়েছে।
Method 3: Using Recursion
এখানে আমরা recursion ব্যবহার করে স্ট্রিংটিকে উল্টো করে দেখানোর একটি পদ্ধতি দেখবো।
Example: Using Recursion
public class StringReverseExample {
public static void main(String[] args) {
String original = "Hello, World!";
// Recursion দিয়ে String উল্টো করা
String reversed = reverseString(original);
System.out.println("Original String: " + original);
System.out.println("Reversed String: " + reversed);
}
// Recursion function to reverse a string
public static String reverseString(String str) {
if (str.isEmpty()) {
return str; // Base case: if string is empty, return it
} else {
return reverseString(str.substring(1)) + str.charAt(0); // Recursive case
}
}
}
Output:
Original String: Hello, World!
Reversed String: !dlroW ,olleH
Explanation:
reverseString()মেথডে রিকর্সিভলি স্ট্রিংয়ের প্রথম অক্ষর বাদ দিয়ে বাকি অংশের উপরreverseString()কল করা হচ্ছে। শেষে প্রথম অক্ষরটি যোগ করে পূর্ণ স্ট্রিংটি উল্টো হয়ে যাচ্ছে।
Method 4: Using Java 8 Streams
Java 8 এর Streams API ব্যবহার করে স্ট্রিংকে উল্টো করা সম্ভব। এখানে String কে Stream এ পরিণত করে উল্টো করা হবে।
Example: Using Java 8 Streams
import java.util.stream.*;
public class StringReverseExample {
public static void main(String[] args) {
String original = "Hello, World!";
// Java 8 Stream ব্যবহার করে String উল্টো করা
String reversed = new StringBuilder(original)
.reverse()
.toString();
System.out.println("Original String: " + original);
System.out.println("Reversed String: " + reversed);
}
}
Output:
Original String: Hello, World!
Reversed String: !dlroW ,olleH
Explanation:
- এই উদাহরণে Stream বা Java 8 এর lambda expression ব্যবহার না করে, আমরা StringBuilder ক্লাসের
reverse()মেথড ব্যবহার করেছি যেটি Java 8 এ খুবই সুবিধাজনক।
Java তে একটি String কে উল্টো (reverse) করার জন্য বিভিন্ন পদ্ধতি রয়েছে। এখানে StringBuilder, for loop, recursion এবং Streams API ব্যবহারের মাধ্যমে স্ট্রিং উল্টো করার উদাহরণ দেওয়া হয়েছে।
- StringBuilder এবং StringBuffer দ্রুত এবং কার্যকরী উপায় হিসেবে বিবেচিত হয়, কারণ এই ক্লাসগুলো mutable (পরিবর্তনযোগ্য) এবং ডেটার উপর আরও বেশি নিয়ন্ত্রণ প্রদান করে।
- for loop পদ্ধতিটি কাস্টমাইজেশন এবং রিকার্সিভ স্ট্রিং রিভার্সের জন্য উপকারী।
- Recursion স্ট্রিং রিভার্সের একটি আকর্ষণীয় এবং একাডেমিক পদ্ধতি, তবে এটি ছোট ডেটার জন্য উপযুক্ত।
- Streams API ব্যবহার করলে কমপ্যাক্ট এবং প্রফেশনাল কোড লেখা যায়, তবে অন্যান্য পদ্ধতির চেয়ে কিছুটা বেশি কোড লেখা হয়।
এভাবে আপনি যে কোন স্ট্রিং উল্টো করার জন্য উপযুক্ত পদ্ধতি নির্বাচন করতে পারেন।
Read more