अगर एक चर एक खाली जगह के बराबर है तो कैसे जांचें?


104

यहाँ मुझे क्या मिला है:

private static int countNumChars(String s) {
    for(char c : s.toCharArray()){
        if (Equals(c," "))
    }
}

लेकिन उस कोड का कहना है कि यह उस विधि के लिए प्रतीक नहीं मिल सकता है। मुझे याद है जावा इस तरह की तुलना कर रहा है ... कोई सुझाव?


2
खाली स्थान - ' 'कोई सामग्री नहीं है?
एंड्रियास डोल

जवाबों:


213
if (c == ' ')

charएक आदिम डेटा प्रकार है, इसलिए इसके साथ तुलना की जा सकती है ==

इसके अलावा, दोहरे उद्धरण चिह्नों का उपयोग करके आप Stringनिरंतर ( " ") बनाते हैं , जबकि एकल उद्धरणों के साथ यह एक charस्थिर ( ' ') है।


87

आपको जिस कोड की आवश्यकता होती है, वह इस बात पर निर्भर करता है कि "खाली जगह" से आपका क्या मतलब है।

  • यदि आपका मतलब ASCII / लैटिन -1 / यूनिकोड अंतरिक्ष चरित्र (0x20) उर्फ ​​SP है, तो:

    if (ch == ' ') {
        // ...
    }
  • यदि आपका मतलब पारंपरिक ASCII व्हाट्सएप पात्रों (SP, HT, VT, CR, NL) से है, तो:

    if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' || ch == '\x0b') {
        // ...
    }
  • यदि आपका मतलब किसी भी यूनिकोड व्हाट्सएप चरित्र से है, तो:

    if (Character.isWhitespace(ch)) {
        // ...
    }

ध्यान दें कि यूनिकोड व्हाट्सएप में अतिरिक्त ASCII नियंत्रण कोड और उच्च कोड विमानों में कुछ अन्य यूनिकोड वर्ण शामिल हैं; के लिए javadoc देखें Character.isWhitespace(char)


आपने जो लिखा वह यह था:

    if (Equals(ch, " ")) {
        // ...
    }

यह कई स्तरों पर गलत है। सबसे पहले, जिस तरह से जावा कंपाइलर यह व्याख्या करने की कोशिश करता है कि हस्ताक्षर के साथ एक विधि के लिए एक कॉल के रूप में है boolean Equals(char, String)

  • यह गलत है क्योंकि कोई विधि मौजूद नहीं है, क्योंकि कंपाइलर ने त्रुटि संदेश में सूचना दी थी।
  • Equalsवैसे भी आमतौर पर एक विधि का नाम नहीं होगा। जावा कन्वेंशन यह है कि विधि नाम कम केस लेटर से शुरू होते हैं।
  • आपका कोड (लिखित रूप में) एक चरित्र और एक स्ट्रिंग तुलना करने के लिए कोशिश कर रहा था, लेकिन charऔर Stringतुलना नहीं कर रहे हैं और एक आम आधार प्रकार में ढाला नहीं जा सकता है।

जावा में एक तुलनित्र के रूप में ऐसी कोई चीज है, लेकिन यह एक इंटरफ़ेस है न कि एक विधि, और इसे इस तरह घोषित किया जाता है:

    public interface Comparator<T> {
        public int compare(T v1, T v2);
    }

दूसरे शब्दों में, विधि का नाम compare(नहीं Equals) है, यह एक पूर्णांक (बूलियन नहीं ) लौटाता है, और यह दो मानों की तुलना करता है जिन्हें टाइप पैरामीटर द्वारा दिए गए प्रकार में पदोन्नत किया जा सकता है।


किसी (हटाए गए उत्तर में!) ने कहा कि उन्होंने यह कोशिश की:

    if (c == " ")

यह दो कारणों से विफल होता है:

  • " "एक स्ट्रिंग शाब्दिक है और एक चरित्र शाब्दिक नहीं है, और जावा सीधे Stringऔर charमूल्यों की तुलना करने की अनुमति नहीं देता है।

  • आपको स्ट्रिंग्स या स्ट्रिंग शाब्दिक का उपयोग करके तुलना नहीं करनी चाहिए ====एक संदर्भ प्रकार पर ऑपरेटर वस्तु पहचान, नहीं वस्तु मूल्य तुलना करती है। के मामले में Stringयह अलग पहचान और एक ही मूल्य के साथ विभिन्न वस्तुओं के लिए आम है। एक ==परीक्षण अक्सर गलत उत्तर देगा ... इस दृष्टिकोण से कि आप यहां क्या करने की कोशिश कर रहे हैं।


20

आप उपयोग कर सकते हैं

Character.isWhitespace(c)

या वर्ण वर्ग में उपलब्ध अन्य विधियों में से कोई भी।

  if (c == ' ')

भी काम करता है।


खैर यह अंततः इस बात पर निर्भर करता है कि क्या वह केवल रिक्त स्थान के लिए जाँच कर रहा है। मेरा मतलब है कि अगर इसमें एक टैब शामिल है, तो आपको एक झूठी सकारात्मक मिलेगी।

अपडेट किया गया। वह वह कर सकता है जो उसे चरित्र से सीधे चाहिए, हालांकि यह ओवरकिल है।
Corv1nus

18

चूंकि charएक आदिम प्रकार है, आप बस लिख सकते हैं c == ' '
आप केवल कॉल करने की आवश्यकता equals()की तरह संदर्भ प्रकार के लिए Stringया Character



11

चरित्र की तुलना करने के लिए आप ==ऑपरेटर का उपयोग करते हैं :

if (c == ' ')

5

Character.isSpaceChar(c) || Character.isWhitespace(c) मेरे लिए काम किया।


4

इस मामले में, आप स्ट्रिंग तुलनात्मक फ़ंक्शन के बारे में सोच रहे हैं "String".equals("some_text")। चार्ट को इस फ़ंक्शन का उपयोग करने की आवश्यकता नहीं है। इसके बजाय एक मानक ==तुलना ऑपरेटर पर्याप्त होगा।

private static int countNumChars(String s) {
    for(char c : s.toCharArray()){
        if (c == ' ') // your resulting outcome
    }
}

3

पहली नज़र में, आपका कोड संकलित नहीं होगा। चूंकि नेस्टेड है अगर स्टेटमेंट में कोई ब्रेसिज़ नहीं है, तो यह अगली पंक्ति के कोड पर विचार करेगा जिसे इसे निष्पादित करना चाहिए। इसके अलावा, आप एक स्ट्रिंग के खिलाफ एक चर की तुलना कर रहे हैं, ""। मानों की तुलना चार्ट के रूप में करने का प्रयास करें। मुझे लगता है कि सही सिंटैक्स होगा:

if(c == ' '){
   //do something here
}

लेकिन फिर, मैं "Equal"कक्षा से परिचित नहीं हूं


3

तुम कोशिश कर सकते हो:

if(Character.isSpaceChar(ch))
{
    // Do something...
}

या:

if((int) ch) == 32)
{
    // Do something...
}

-5

तुलना करने के लिए Stringsआपको बराबर कीवर्ड का उपयोग करना होगा ।

if(c.equals(""))
{
}

1) यह प्रश्न वर्णों की तुलना करने के बारे में है, तार नहीं। 2) equalsजावा में कोई कीवर्ड नहीं है । यह एक पहचानकर्ता है। 3) चूंकि cएक char(आदिम प्रकार !!) है, आप कॉल नहीं कर सकते c.equals(...)। 4) यदि आप कर सकते हैं, तो भी कोई charमूल्य नहीं है जो नक्शे में है ""। उत्तरार्द्ध का अर्थ है "इसमें कोई वर्ण नहीं" वाला स्ट्रिंग। यह एक चरित्र से मेल नहीं खा सकता है।
स्टीफन सी।

इस प्रश्न का उत्तर देने की कुंजी "रिक्त स्थान" के लिए आ रही है जो संदर्भ में किसी प्रकार का अर्थ रखता है।
स्टीफन सी।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.