दिलचस्प पोस्ट
जावा में क्लिपबोर्ड पर कॉपी करना एडीबी शुरू नहीं होगा मैं ब्राउज़र को पेज को प्रदर्शित करने के लिए कैसे इंतजार कर सकता हूं जब तक कि यह पूरी तरह लोड नहीं हो जाता? किसी भी फैंसीबॉक्स बॉक्स पर सीधा लिंक कैसे बनाएं .NET में उपयोग के बाद ऑब्जेक्ट्स रिक्त / कुछ भी नहीं सेट करना MVVM के साथ कई चयन प्रबंधित करना एससीएसएस और एसस के बीच अंतर क्या है? ASP.NET MS11-100: मैं पोस्ट किए गए फार्म मूल्यों की अधिकतम संख्या को कैसे बदल सकता हूँ? mutate_each / summarise_each in dplyr: मैं कुछ कॉलम कैसे चुनूं और उत्परिवर्तित कॉलम के नए नाम दें? जावा में साथ बयान जावास्क्रिप्ट में स्क्रिप्ट को समाप्त कैसे करें सी # में WebBrowser नियंत्रण DocumentCompleted ईवेंट का उपयोग कैसे करें? क्या खिड़कियों में खुली फ़ाइलों की संख्या पर कोई सीमा है? स्कीम में डॉट नोटेशन एक्सप्रेस 4.0 के साथ फ़ाइल अपलोडिंग: req.files अपरिभाषित

एक स्ट्रिंग में एक विशिष्ट सूचकांक में एक चरित्र को बदलें?

मैं एक स्ट्रिंग में एक विशिष्ट अनुक्रमणिका पर एक वर्ण को बदलने की कोशिश कर रहा हूँ।

मैं क्या कर रहा हूं:

String myName = "domanokz"; myName.charAt(4) = 'x'; 

यह एक त्रुटि देता है क्या ऐसा करने के लिए कोई तरीका है?

वेब के समाधान से एकत्रित समाधान "एक स्ट्रिंग में एक विशिष्ट सूचकांक में एक चरित्र को बदलें?"

स्ट्रिंग जावा में अपरिवर्तनीय है आप उन्हें बदल नहीं सकते।

आपको वर्ण के साथ एक नई स्ट्रिंग बनाने की आवश्यकता है।

 String myName = "domanokz"; String newName = myName.substring(0,4)+'x'+myName.substring(5); 

या आप एक स्ट्रिंगबइल्डर का उपयोग कर सकते हैं:

 StringBuilder myName = new StringBuilder("domanokz"); myName.setCharAt(4, 'x'); System.out.println(myName); 

स्ट्रिंग को चार में बदलें [], सूचकांक द्वारा पत्र की जगह, फिर सरणी को वापस स्ट्रिंग में कनवर्ट करें।

 String myName = "domanokz"; char[] myNameChars = myName.toCharArray(); myNameChars[4] = 'x'; myName = String.valueOf(myNameChars); 

स्ट्रिंग जावा में एक अपरिवर्तनीय वर्ग है जो किसी भी तरीके को संशोधित करते हैं जो हमेशा संशोधन के साथ एक नया स्ट्रिंग ऑब्जेक्ट लौटाते हैं। यदि आप तार को हेरफेर करना चाहते हैं, तो स्ट्रिंगबिल्ल्डर या स्ट्रिंगबफ़र पर विचार करें, जब आपको थ्रेड सुरक्षा की आवश्यकता हो

मैं पेटार इवानोव से सहमत हूं लेकिन अगर हम निम्न तरीके से कार्यान्वित करते हैं तो यह सबसे अच्छा है:

 public String replace(String str, int index, char replace){ if(str==null){ return str; }else if(index<0 || index>=str.length()){ return str; } char[] chars = str.toCharArray(); chars[index] = replace; return String.valueOf(chars); } 

जैसा कि पहले यहां बताया गया है, String इंस्टेंसेस अपरिवर्तनीय हैं StringBuffer और StringBuilder अस्थिर और इस तरह के उद्देश्य के लिए उपयुक्त हैं कि आपको थ्रेड सुरक्षित होना चाहिए या नहीं।

हालांकि स्ट्रिंग को संशोधित करने का एक तरीका है, लेकिन मैं इसे कभी भी सुझाएंगे क्योंकि यह असुरक्षित, अविश्वसनीय है और इसे धोखाधड़ी के रूप में माना जा सकता है: आप स्ट्रिंग ऑब्जेक्ट में आंतरिक char सरणी को संशोधित करने के लिए प्रतिबिंब का उपयोग कर सकते हैं। प्रतिबिंब आपको वर्तमान क्षेत्र में आम तौर पर छिपे हुए क्षेत्रों और विधियों तक पहुंचने की सुविधा देता है (निजी पद्धतियों या अन्य वर्ग के क्षेत्रों …)।

 public static void main(String[] args) { String text = "This is a test"; try { //String.value is the array of char (char[]) //that contains the text of the String Field valueField = String.class.getDeclaredField("value"); //String.value is a private variable so it must be set as accessible //to read and/or to modify its value valueField.setAccessible(true); //now we get the array the String instance is actually using char[] value = (char[])valueField.get(text); //The 13rd character is the "s" of the word "Test" value[12]='x'; //We display the string which should be "This is a text" System.out.println(text); } catch (NoSuchFieldException | SecurityException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } 

आप एक स्ट्रिंग अधिलेखित कर सकते हैं, निम्नानुसार:

 String myName = "halftime"; myName = myName.substring(0,4)+'x'+myName.substring(5); 

ध्यान दें कि स्ट्रिंग myName दोनों पंक्तियों पर होती है, और दूसरी पंक्ति के दोनों किनारों पर।

इसलिए, हालांकि तार तकनीकी रूप से अपरिवर्तनीय हो सकते हैं, फिर भी, आप उन्हें अधिलेखित करके उन्हें संपादन योग्य मान सकते हैं।

मुझे पहली बात यह जानी चाहिए कि charAt एक विधि है और बराबर चिह्न का उपयोग करके उसे मूल्य निर्दिष्ट करना कुछ भी नहीं करेगा। यदि कोई स्ट्रिंग अपरिवर्तनीय है, तो charAt विधि, स्ट्रिंग ऑब्जेक्ट में परिवर्तन करने के लिए नए वर्ण वाले तर्क प्राप्त करना होगा। दुर्भाग्य से, स्ट्रिंग अपरिवर्तनीय है। स्ट्रिंग को संशोधित करने के लिए, मुझे स्ट्रेटबिल्ल्डर का उपयोग करना चाहिए जैसा कि श्री पेटार इवानोव ने सुझाव दिया था।

यह काम करेगा

  String myName="domanokz"; String p=myName.replace(myName.charAt(4),'x'); System.out.println(p); 

आउटपुट: डोमक्सोकज़