Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

JShell में Java 9: String यूटिलिटी और इम्मुटेबिलिटी

JShell Java 9 का इंटरैक्टिव REPL टूल है जो String ऑपरेशंस का त्वरित परीक्षण करने के लिए आदर्श है। String क्लास java.lang पैकेज का हिस्सा है और टेक्स्ट प्रोसेसिंग के लिए कई बिल्ट-इन मेथड्स प्रदान करती है।

1. String यूटिलिटी मेथड्स

सामान्य टेक्स्ट प्रोसेसिंग के लिए बिल्ट-इन मेथड्स।

खोज और सूचकांक

jshell> String str = "JShell is a new feature in Java9"
str ==> "JShell is a new feature in Java9"

jshell> str.indexOf("new")
$4 ==> 12

jshell> str.charAt(7)
$5 ==> 'i'

jshell> str.indexOf('i')
$6 ==> 7

jshell> str.lastIndexOf('i')
$7 ==> 24

jshell> str.contains("feature")
$8 ==> true

प्रारंभ/अंत जांच

jshell> str.startsWith("JShell")
$9 ==> true

jshell> str.startsWith("Java9")
$10 ==> false

jshell> str.endsWith("Java9")
$11 ==> true

jshell> str.endsWith("a9")
$12 ==> true

jshell> str.endsWith("a9java")
$13 ==> false

तुलना

jshell> String str1 = "value"
str1 ==> "value"

jshell> str1.equals("value")
$15 ==> true

jshell> str1.equals("VALUE")
$16 ==> false

jshell> str1.equalsIgnoreCase("VALUE")
$17 ==> true

अन्य उपयोगी मेथड्स

jshell> "  hello  ".trim()
$1 ==> "hello"

jshell> "HELLO".toLowerCase()
$2 ==> "hello"

jshell> "hello".toUpperCase()
$3 ==> "HELLO"

jshell> "a,b,c".split(",")
$4 ==> String[3] { "a", "b", "c" }

jshell> "hello".replace('l', 'L')
$5 ==> "heLLo"

jshell> String.format("Name: %s, Age: %d", "Alice", 30)
$6 ==> "Name: Alice, Age: 30"

jshell> "abc".repeat(3)  // Java 11+
$7 ==> "abcabcabc"

jshell> "  hi  ".strip()  // Java 11+, यूनिकोड-अवेयर
$8 ==> "hi"

2. String इम्मुटेबिलिटी (अपरिवर्तनीयता)

मुख्य अवधारणा: String ऑब्जेक्ट्स अपरिवर्तनीय हैं - निर्माण के बाद उनका मान नहीं बदला जा सकता। कोई भी "संशोधन" ऑपरेशन एक नया String ऑब्जेक्ट बनाता है।

concat() उदाहरण

jshell> String str = "Tutorialspoint"
str ==> "Tutorialspoint"

jshell> str.concat(" is e-learning app")
$3 ==> "Tutorialspoint is e-learning app"

jshell> str  // मूल अपरिवर्तित!
str ==> "Tutorialspoint"

jshell> // नए मान को कैप्चर करना होगा
jshell> String str1 = str.concat(".")
str1 ==> "Tutorialspoint."

jshell> str1
str1 ==> "Tutorialspoint."

jshell> // पुनः असाइन करके मूल चर अपडेट करें
jshell> String str = str.concat(" is e-learning app")
str ==> "Tutorialspoint is e-learning app"

jshell> str
str ==> "Tutorialspoint is e-learning app"

अन्य इम्मुटेबल ऑपरेशंस

jshell> String s = "Tutorialspoint is e-learning app."
s ==> "Tutorialspoint is e-learning app."

jshell> s.toUpperCase()
$10 ==> "TUTORIALSPOINT IS E-LEARNING APP."

jshell> s.toLowerCase()
$11 ==> "tutorialspoint is e-learning app."

jshell> s  // अभी भी मूल!
s ==> "Tutorialspoint is e-learning app."

jshell> // चेनिंग - प्रत्येक कॉल नया String बनाता है
jshell> s.trim().toUpperCase().replace(" ", "_")
$12 ==> "TUTORIALSPOINT_IS_E-LEARNING_APP."

इम्मुटेबिलिटी के निहितार्थ

प्रदर्शन विचार

// खराब: लूप में String कन्कैटनेशन (O(n²) ऑब्जेक्ट्स बनाता है)
String result = "";
for (int i = 0; i < 1000; i++) {
    result += i;  // प्रत्येक इटरेशन में नया String!
}

// अच्छा: StringBuilder का उपयोग करें (परिवर्तनीय)
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
    sb.append(i);
}
String result = sb.toString();  // एक String बनाता है

// Java 8+ StringJoiner
String joined = String.join(",", "a", "b", "c");  // "a,b,c"

सुरक्षा लाभ

  • थ्रेड-सुरक्षित: अपरिवर्तनीय ऑब्जेक्ट्स स्वाभाविक रूप से थ्रेड-सुरक्षित हैं
  • हैशकोड कैशिंग: हैशकोड एक बार गणना किया जाता है, कैश किया जाता है
  • स्ट्रिंग पूलिंग: समान लिटरल्स समान ऑब्जेक्ट साझा करते हैं
  • सुरक्षा: फ़ाइल पथ, SQL क्वेरी, नेटवर्क पते संशोधित नहीं किए जा सकते

स्ट्रिंग पूल डेमो

jshell> String a = "hello"
a ==> "hello"

jshell> String b = "hello"
b ==> "hello"

jshell> a == b  // समान पूल्ड ऑब्जेक्ट!
$3 ==> true

jshell> String c = new String("hello")
c ==> "hello"

jshell> a == c  // अलग ऑब्जेक्ट!
$5 ==> false

jshell> a.equals(c)  // लेकिन सामग्री समान
$6 ==> true

jshell> c.intern() == a  // पूल में डालें
$7 ==> true

आधुनिक String API (Java 11+)

jshell> "hello".isBlank()       // Java 11: खाली या व्हाइटस्पेस
$1 ==> false

jshell> "  \t\n  ".isBlank()
$2 ==> true

jshell> "hello".lines()       // Java 11: लाइन्स की स्ट्रीम
$3 ==> java.util.stream.Stream...

jshell> "hello".strip()       // Java 11: यूनिकोड-अवेयर ट्रिम
$4 ==> "hello"

jshell> "hello".stripLeading()
$5 ==> "hello"

jshell> "hello".stripTrailing()
$6 ==> "hello"

सर्वोत्तम अभ्यास

  • तुलना के लिए == के बजाय .equals() का उपयोग करें
  • लूप/कन्कैटनेशन के लिए StringBuilder/StringJoiner का उपयोग करें
  • नल-सुरक्षित तुलना: "literal".equals(variable) NPE से बचाता है
  • इम्मुटेबिलिटी याद रखें: परिवर्तनकारी मेथड्स के परिणाम असाइन करें
  • पूलिंग: लिटरल्स स्वचालित रूप से पूल्ड होते हैं; intern() का उपयोग विरल रूप से करें
  1. Java 9 में JavaFX का उपयोग करके JShell को प्रोग्रामेटिक रूप से लागू करें Java 9 में JavaFX का उपयोग करके JShell को प्रोग्रामेटिक रूप से लागू करें

    Java 9 ने jdk.jshell API पेश किया जो डेवलपर्स को अपने एप्लिकेशन में JShell कार्यक्षमता को एम्बेड करने की अनुमति देता है। यह लेख दिखाता है कि एक JavaFX एप्लिकेशन कैसे बनाया जाए जो JShell का उपयोग करके कोड स्निपेट्स का मूल्यांकन करता है और परिणाम प्रदर्शित करता है। आवश्यक निर्भरताएं Java 9+ (JSh

  1. जावा 9 में JShell में स्निपेट को सेव, एडिट और ड्रॉप कैसे करें? जावा 9 में JShell में स्निपेट को सेव, एडिट और ड्रॉप कैसे करें?

    जावा शेल या JShell जावा 9 के साथ पेश किया गया एक आधिकारिक REPL (रीड-इवैल्यूएट-प्रिंट-लूप) है। यह मुख्य() मेथड की आवश्यकता के बिना या कोड को निष्पादित करने से पहले कंपाइल किए बिना त्वरित प्रोटोटाइपिंग, डीबगिंग के लिए एक इंटरैक्टिव शेल प्रदान करता है। कमांड प्रॉम्प्ट में jshell टाइप करके JShell आसानी

  1. - Java में दो स्ट्रिंग्स को मिक्स करके दूसरी कैसे जनरेट करें?

    स्ट्रिंग्स का उपयोग Java में कैरेक्टर्स के सीक्वेंस को स्टोर करने के लिए किया जाता है, उन्हें ऑब्जेक्ट्स के रूप में माना जाता है। java.lang पैकेज का String क्लास एक स्ट्रिंग को दर्शाता है। आप या तो new कीवर्ड का उपयोग करके (किसी अन्य ऑब्जेक्ट की तरह) स्ट्रिंग बना सकते हैं, या लिटरल को वैल्यू असाइन