Lesson ৭ মিনিট পড়া

স্ট্রিং (Strings)

শব্দ, বাক্য এবং এগুলোর সাহায্যে আপনি যে জাদুগুলো দেখাতে পারেন

স্ট্রিং — কেবল সাধারণ টেক্সট নয় (Strings — More Than Just Text)

জাভাতে একটি স্ট্রিং (String) কে অনেকটা বোতাম বা পুঁতির তৈরি একটি মালার মতো কল্পনা করতে পারেন। প্রতিটি পুঁতির (ক্যারেক্টার বা অক্ষর) একটি নির্দিষ্ট নম্বর থাকে যা ০ (0) থেকে শুরু হয়। "Hello" শব্দটিতে মোট ৫টি অক্ষর রয়েছে: H রয়েছে ০ নম্বরে, e ১ নম্বরে, l ২ নম্বরে, l ৩ নম্বরে, এবং o ৪ নম্বরে।

জাভাতে স্ট্রিংগুলো ইমিউটেবল (immutable) — অর্থাৎ একবার তৈরি হয়ে যাওয়ার পর এদের আর পরিবর্তন করা যায় না। প্রতিবার আপনি যখন কোনো স্ট্রিংকে "পরিবর্তন" করার চেষ্টা করেন, জাভা মূলত পর্দার আড়ালে সম্পূর্ণ নতুন আরেকটি স্ট্রিং তৈরি করে ফেলে। এটি অনেকটা কাগজের ওপর লেখা কালির মতো — আপনি কালি মুছতে পারবেন না, বরং আপনাকে নতুন আরেকটি কাগজ নিতে হবে।

প্রয়োজনীয় স্ট্রিং মেথড (Essential String Methods)

public class Main {
public static void main(String[] args) {
String greeting = "Hello, World!";
// Length — how many characters?
System.out.println("Length: " + greeting.length()); // 13
// charAt — grab one character by position
System.out.println("First char: " + greeting.charAt(0)); // H
System.out.println("Last char: " + greeting.charAt(greeting.length() - 1)); // !
// substring — cut out a piece
System.out.println("Sub: " + greeting.substring(0, 5)); // Hello
System.out.println("From 7: " + greeting.substring(7)); // World!
// Case changes
System.out.println("Upper: " + greeting.toUpperCase()); // HELLO, WORLD!
System.out.println("Lower: " + greeting.toLowerCase()); // hello, world!
// Finding & checking
System.out.println("Contains 'World': " + greeting.contains("World"));
System.out.println("Starts with 'Hello': " + greeting.startsWith("Hello"));
System.out.println("Index of 'W': " + greeting.indexOf('W'));
}
}
Output
Length: 13
First char: H
Last char: !
Sub: Hello
From 7: World!
Upper: HELLO, WORLD!
Lower: hello, world!
Contains 'World': true
Starts with 'Hello': true
Index of 'W': 7

বহুল ব্যবহৃত == এবং .equals() এর দ্বন্দ্ব (The Great == vs .equals() Debate)

জাভা শেখার শুরুতে এই ব্যাপারটি সবাইকে বেশ ভালোই ভোগায়। ঘটনাটি হলো এরকম:

  • == যাচাই করে যে দুটি ভ্যারিয়েবল একই মেমরি লোকেশন বা ঠিকানায় থাকা বস্তুকে নির্দেশ করছে কি না। এটি অনেকটা এমন প্রশ্ন করার মতো, "এই দুটি চাবি কি একই লকারের?"
  • অন্যদিকে .equals() যাচাই করে যে দুটি স্ট্রিংয়ের ভেতরের কনটেন্ট বা লেখাগুলো হুবহু একই কি না। এটি অনেকটা এমন বলার মতো, "এই দুটি কাগজের পাতায় কি একই বাক্য লেখা আছে?"

বেশিরভাগ ক্ষেত্রেই, আপনার .equals() ব্যবহার করা প্রয়োজন হবে। স্ট্রিংয়ের ক্ষেত্রে == ব্যবহার করলে আপনি অদ্ভুত সব ফলাফল পেতে পারেন, কারণ জাভা অনেক সময় আগে থেকে থাকা একই স্ট্রিং অবজেক্ট পুনরায় ব্যবহার করে, আবার অনেক সময় করে না।

equals() বনাম == এবং String.format()

public class Main {
public static void main(String[] args) {
// equals() vs ==
String a = "hello";
String b = "hello";
String c = new String("hello");
System.out.println("a == b: " + (a == b)); // true (same pool object)
System.out.println("a == c: " + (a == c)); // false! (different objects)
System.out.println("a.equals(c): " + a.equals(c)); // true (same content)
// String.format — like a template with blanks to fill in
String name = "Laboni";
int score = 95;
String report = String.format("%s scored %d out of 100 (%.1f%%)",
name, score, (double) score);
System.out.println(report);
// Useful string operations
String messy = " too many spaces ";
System.out.println("Trimmed: '" + messy.trim() + "'");
String csv = "আম,জাম,কাঁঠাল";
String[] fruits = csv.split(",");
System.out.println("Second fruit: " + fruits[1]);
}
}
Output
a == b: true
a == c: false
a.equals(c): true
Luna scored 95 out of 100 (95.0%)
Trimmed: 'too many spaces'
Second fruit: জাম

স্ট্রিংবিল্ডার — যখন প্রয়োজন দ্রুতগতির পারফরম্যান্স (StringBuilder — When You Need Speed)

public class Main {
public static void main(String[] args) {
// Bad: creating tons of throwaway String objects
// String result = "";
// for (...) result += something; // slow!
// Good: StringBuilder is like a whiteboard you can erase and rewrite
StringBuilder sb = new StringBuilder();
sb.append("I");
sb.append(" love");
sb.append(" Java");
sb.append("!");
System.out.println(sb.toString());
// You can also insert and delete
sb.insert(6, " learning");
System.out.println(sb.toString());
sb.delete(0, 2); // remove "I "
System.out.println(sb.toString());
// Reverse!
StringBuilder word = new StringBuilder("desserts");
System.out.println("Reversed: " + word.reverse());
}
}
Output
I love Java!
I love learning Java!
love learning Java!
Reversed: stressed
Note: আপনি যদি কোনো লুপের ভেতরে স্ট্রিং যুক্ত করার কাজ করেন (যেমন ১,০০০ নাম পরপর যুক্ত করা), তবে অবশ্যই StringBuilder ব্যবহার করবেন+ চিহ্ন দিয়ে সাধারণ স্ট্রিং কনক্যাটেনেশন (concatenation) করলে প্রতিবারই নতুন একটি String অবজেক্ট তৈরি হয়, যা অনেকটা একটি মাত্র শব্দ যোগ করার জন্য পুরো একটি বই নতুন করে লেখার মতো। StringBuilder অনেকটা হোয়াইটবোর্ডের (whiteboard) মতো — এটি মোছা যায় এবং আপনি চাইলে এতে শুধু নতুন নতুন জিনিস যুক্ত করতে পারেন।
চ্যালেঞ্জ

ছোট কুইজ

"hello".charAt(1) কী রিটার্ন করবে?

পড়া চালিয়ে যান

Operators & ExpressionsConditionals