जावा वर्ण वर्ग में खाली चार का प्रतिनिधित्व कैसे करें


126

मैं ""स्ट्रिंग में के रूप में जावा में एक खाली चरित्र का प्रतिनिधित्व करना चाहता हूँ ...

उसके जैसा char ch = an empty character;

वास्तव में मैं एक चरित्र को अंतरिक्ष छोड़ने के बिना बदलना चाहता हूं।

मुझे लगता है कि यह समझने के लिए पर्याप्त हो सकता है कि इसका क्या मतलब है: कोई भी चरित्र अंतरिक्ष भी नहीं।


2
आप जिस ऑपरेशन को करना चाहते हैं, उसका एक उदाहरण दिखाएँ।
सूडोकोड 12

1
@rahulsri मैं उस कोड को नहीं देख सकता जिसका आप उल्लेख कर रहे हैं।
पीटर लॉरी

2
मुझे लगता है कि ओपी String.replace(' ', EMPTY_CHARACTER)उसी तरह का प्रदर्शन करना चाहता है जैसे कि String.replace(" ", "")। यानी सभी स्पेस को हटा दें।
रोलैंड

जवाबों:


134

आप असाइन कर सकते हैं '\u0000'(या 0)। इस उद्देश्य के लिए, का उपयोग करें Character.MIN_VALUE

Character ch = Character.MIN_VALUE;

5
'\0'वास्तव में क्या मतलब है? @AVD
दालचीनी टोस्ट

8
@cinnamontoast - इसकी एक अशक्त चार शाब्दिक
adatapost

11
एक सुस्त चार शाब्दिक अभी भी एक चरित्र है और भंडारण में जगह लेता है।
जिमी टी।

7
सवाल 'कोई वर्ण नहीं' का प्रतिनिधित्व करने का तरीका पूछता है। जबकि अशक्त चरित्र कई स्थितियों में उपयोगी है, यह अभी भी अपने आप में एक चरित्र है, इसलिए इस प्रश्न का उत्तर नहीं हो सकता है। सही उत्तर, जो पहले से ही user3001 द्वारा दिया गया है, जावा के बॉक्स्ड कैरेक्टर रेफरेंस टाइप का उपयोग करना है और इसे 'शून्य' मान देना है जब 'वर्ण नहीं' की आवश्यकता होती है।
क्रिस हटन

2
@AVD हाँ, और rahulsri पूछते हैं कि एक लापता चरित्र का प्रतिनिधित्व कैसे करें। तो एक अशक्त चरित्र संदर्भ फिट बैठता है।
क्रिस Hatton

97

charबिल्कुल एक चरित्र का मतलब है। आप इस प्रकार से शून्य वर्ण निर्दिष्ट नहीं कर सकते।

इसका मतलब है कि कोई चार मूल्य नहीं है जिसके लिए String.replace(char, char)एक स्ट्रिंग एक अलग लंबाई के साथ वापस आ जाएगी।


14
इस तथ्य के तीन साल बाद, किसी ने अंत में एक सही और पूर्ण उत्तर दिया।
मालनॉर्मलू

यह बहुत सटीक उत्तर है।
एडगर असट्रिएन

36

जैसा कि चरित्र से एक वर्ग व्युत्पन्न वर्ग है, आप अशक्त "उदाहरण" के रूप में असाइन कर सकते हैं:

Character myChar = null;

समस्या सुलझ गयी ;)


5
यह एक सही समाधान है और स्वीकृत उत्तर होना चाहिए।
क्रिस हाटन

2
हालांकि यह ओपी का जवाब नहीं देता है, यह वही है जो मैं देख रहा था।
एलिसा अबूदा

2
सबसे सही उत्तर "यह नहीं किया जा सकता है"। यह निकटतम है जो आप प्राप्त कर सकते हैं।
मालनॉर्मलू

2
चरित्र है, लेकिन चार नहीं है।
पीटर डी बीओ

12

एक खाली स्ट्रिंग एक आवरण है char[]जिसमें कोई तत्व नहीं है। आपके पास खाली हो सकता है char[]। लेकिन आपके पास "खाली" नहीं हो सकता char। अन्य आदिम की तरह, charएक मूल्य है।

आप कहते हैं कि आप "किसी स्थान को छोड़े बिना चरित्र को बदलना चाहते हैं"।

यदि आप एक के साथ काम कर रहे हैं char[], तो आप char[]उस तत्व को हटाकर नया बना लेंगे ।

यदि आप एक के साथ काम कर रहे हैं String, तो आप Stringहटाए गए चरित्र के साथ एक नया (स्ट्रिंग अपरिवर्तनीय है) बनाएंगे ।

यहां कुछ नमूने दिए गए हैं कि आप कैसे चार को हटा सकते हैं:

public static void main(String[] args) throws Exception {

    String s = "abcdefg";
    int index = s.indexOf('d');

    // delete a char from a char[]
    char[] array = s.toCharArray();
    char[] tmp = new char[array.length-1];
    System.arraycopy(array, 0, tmp, 0, index);
    System.arraycopy(array, index+1, tmp, index, tmp.length-index);
    System.err.println(new String(tmp));

    // delete a char from a String using replace
    String s1 = s.replace("d", "");
    System.err.println(s1);

    // delete a char from a String using StringBuilder
    StringBuilder sb = new StringBuilder(s);
    sb.deleteCharAt(index);
    s1 = sb.toString();
    System.err.println(s1);

}

प्रतिस्थापित () समाधान के अलावा अन्य दो चरित्र की पहली घटना को प्रतिस्थापित करेंगे और सभी को नहीं।
sactiw

8

जैसा charsकि इंटेगर (ASCII- कोड) के रूप में दर्शाया जा सकता है, आप बस लिख सकते हैं:

char c = 0;

ASCII- कोड में 0 है null


0 यूटीएफ -16 कोड इकाई के रूप में ( char) यूनिकोड कोड पॉइंट यू + 0000 के लिए पूर्ण यूटीएफ -16 एन्कोडिंग है। किसी अन्य चरित्र सेट या चरित्र एन्कोडिंग के लिए कोई समानता अप्रासंगिक है। UTF-16 जावा का उपयोग करता है।
टॉम ब्लोडेट

6

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

String str = "Hello";
StringBuilder sb = new StringBuilder(str);
sb.deleteCharAt(1); // to replace e character

3

आप नहीं कर सकते। "" एक स्ट्रिंग के लिए शाब्दिक है, जिसमें कोई वर्ण नहीं है। इसमें "खाली चरित्र" (आप जो भी इसका मतलब है) शामिल नहीं है।


3

मुझे इसकी तलाश थी। बस सेट करें char c = 0;और यह पूरी तरह से काम करता है। कोशिश करो।

उदाहरण के लिए, यदि आप एक स्ट्रिंग से डुप्लिकेट वर्णों को निकालने का प्रयास कर रहे हैं, तो एक तरीका स्ट्रिंग को चार सरणी में बदलना और वर्णों के हैशसेट में संग्रहीत करना होगा जो स्वचालित रूप से डुप्लिकेट को रोक देगा।

एक और तरीका है, हालांकि, स्ट्रिंग को चार सरणी में बदलना होगा, दो फॉर-लूप का उपयोग करना होगा और बाकी स्ट्रिंग / चार सरणी (एन ^ 2 गतिविधि पर एक बड़ा ओ) के साथ प्रत्येक चरित्र की तुलना करना होगा, फिर प्रत्येक डुप्लिकेट के लिए मिला बस उस चार को 0 पर सेट करें।

... और new String(char[])परिणामी चार सरणी को स्ट्रिंग में बदलने के लिए उपयोग करें और फिर प्रिंट करने के लिए sysout (यह सब जावा btw है)। आप शून्य पर सेट सभी वर्णों का पालन करेंगे, बस वहाँ नहीं हैं और सभी डुप्लिकेट चले गए हैं। लंबी पोस्ट, लेकिन सिर्फ आपको एक उदाहरण देना चाहता था।

हां हां सेट char c = 0;या अगर चार सरणी के लिए, cArray[i]=0उस विशिष्ट डुप्लिकेट चरित्र के लिए सेट करें और आपने इसे हटा दिया होगा।


2

जावा में खाली चरित्र शाब्दिक के रूप में कुछ भी नहीं है , दूसरे शब्दों में, "'का इसके विपरीत कोई अर्थ नहीं है" "जिसका अर्थ है खाली स्ट्रिंग शाब्दिक

खाली चरित्र शाब्दिक का प्रतिनिधित्व करने के बारे में आप शून्य लंबाई चार के माध्यम से जा सकते हैं [], कुछ इस तरह है:

char[] cArr = {};         // cArr is a zero length array
char[] cArr = new char[0] // this does the same

यदि आप स्ट्रिंग कक्षा को संदर्भित करते हैं तो इसका डिफ़ॉल्ट निर्माणकर्ता खाली वर्ण अनुक्रम का उपयोग करके बनाता है new char[0]

इसके अलावा, Character.MIN_VALUE का उपयोग करना सही नहीं है, क्योंकि यह वास्तव में खाली चरित्र नहीं है, बल्कि प्रकार के चरित्र का सबसे छोटा मूल्य है।

मैं भी Character c = null;मुख्य रूप से एक समाधान के रूप में पसंद नहीं करता क्योंकि jvm NPE को फेंक देगा यदि वह इसे अन-बॉक्स करने की कोशिश करता है। दूसरे, अशक्त मूल रूप से कुछ भी नहीं संदर्भ संदर्भ प्रकार है और यहाँ हम आदिम प्रकार के साथ काम कर रहे हैं जो संभव मान के रूप में अशक्त स्वीकार नहीं करते हैं।

यह मानते हुए कि स्ट्रिंग में, स्ट्रिंग कहो, ओपी एक चरित्र की सभी घटनाओं को बदलना चाहता है, 'x', खाली चरित्र के साथ '' कहें, फिर प्रयोग करने का प्रयास करें:

str.replace("x", "");

1

यह मेरा इसे करने का तरीका है।

char[] myEmptyCharArray = "".toCharArray();

वह खाली चरित्र नहीं है। यह एक शून्य लंबाई वर्ण सरणी है।
स्टीफन सी

1
char ch = Character.MIN_VALUE;

ऊपर दिया गया कोड वैरिएबल chको मिनिमम वैल्यू के साथ इनिशियलाइज़ करेगा कि एक चार (यानी \u0000) हो सकता है।


1

आप ऐसा कुछ कर सकते हैं:

mystring.replace(""+ch, "");

0

आप केवल किसी मौजूदा वर्ण का पुन: उपयोग कर सकते हैं। उदा। \0यदि आप इसे एक स्ट्रिंग में रखते हैं, तो आपके पास इसमें एक चरित्र के साथ एक स्ट्रिंग होगा।


कहते हैं charकि आप ऐसा चाहते हैं जब आप करते हैं

String s = 
char ch = ?
String s2 = s + ch; // there is not char which does this.
assert s.equals(s2);

इसके बजाय आपको क्या करना है

String s = 
char ch = MY_NULL_CHAR;
String s2 = ch == MY_NULL_CHAR ? s : s + ch;
assert s.equals(s2);

1
क्या मतलब it not worked? क्या आपका मतलब यह संकलन नहीं है? उस स्थिति में यह होगा char ch = '\0';याchar ch = 0;
पीटर लॉरी

@ वर्णश्री सभी वर्ण वर्ण हैं और कोई वर्ण नहीं है जो वर्ण नहीं है। आपको इस बात की आवश्यकता है कि आपकी वास्तविक आवश्यकता क्या है और इसे अलग तरीके से हल करने का प्रयास करें। nulचरित्र कई विशेष वर्ण है जो अपने एक चरित्र है जो वास्तव में वहाँ नहीं है इंगित करता है में से एक है, लेकिन यह अपने आप अभी भी एक चरित्र है।
पीटर लॉरी

2
"अगर भगवान कुछ भी कर सकता है, क्या भगवान एक चट्टान बना सकता है, यहां तक ​​कि वह उठा नहीं सकता है?" यह सवाल के समान है; क्या आप ऐसा चरित्र बना सकते हैं जो चरित्र नहीं है?
पीटर लॉरी

0

\bदूसरे पैरामीटर में ऑपरेटर (बैकस्पेस एस्केप ऑपरेटर) का उपयोग करें

String test= "Anna Banana";

System.out.println(test); //returns Anna Banana<br><br>
System.out.println(test.replaceAll(" ","\b")); //returns AnnaBanana removing all the spaces in the string

xD ... मनोरंजक चीजों का परिणाम होगा यदि इस प्रकार उपयोग करने की कोशिश कर रहा है (हाँ, mangled, mauled, विघटित) स्ट्रिंग जैसे फ़ाइल नाम के भाग के रूप में।
स्क्रे

0

अरे मैं हमेशा कस्टम सामान के लिए तरीके बनाता हूं जो आमतौर पर जावा में लागू नहीं होता है। यहाँ एक सरल विधि है जिसे मैंने स्ट्रिंग फास्ट से चरित्र को हटाने के लिए बनाया है

    public static String removeChar(String str, char c){
        StringBuilder strNew=new StringBuilder(str.length());
        char charRead;
        for(int i=0;i<str.length();i++){
            charRead=str.charAt(i);
            if(charRead!=c)
                strNew.append(charRead);
        }
        return strNew.toString();
    }

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.