2010-12-22 17 views
79

यहाँ मैं क्या कर लिया है:कैसे जांचें कि कोई खाली खाली स्थान के बराबर है या नहीं?

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

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

+2

* रिक्त स्थान * - कोई सामग्री नहीं है? –

उत्तर

170
if (c == ' ') 

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

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

11

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

if (c == ' ') 
19

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

3

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

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

आप

Character.isWhitespace(c) 

या चरित्र कक्षा में अन्य उपलब्ध तरीकों में से किसी का उपयोग कर सकते हैं।

if (c == ' ') 

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

+0

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

+0

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

3

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

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

लेकिन तब फिर से, मैं "Equal" वर्ग

75

कोड आप की जरूरत है आप "एक खाली जगह" से क्या मतलब है पर निर्भर करता है से परिचित नहीं हूँ।

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

    if (ch == ' ') { 
        // ... 
    } 
    
  • आप पारंपरिक ASCII खाली स्थान के वर्णों के किसी भी मतलब है (सपा, हिंदुस्तान टाइम्स , वीटी, सीआर, NL), तो:

    :

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

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


आप क्या लिखा था इस:

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 के मामले में अलग-अलग पहचान और समान मूल्य के साथ अलग-अलग वस्तुएं होती हैं। एक == परीक्षण अक्सर गलत उत्तर ... जो आप यहां करने का प्रयास कर रहे हैं उसके परिप्रेक्ष्य से।

+0

मैंने जावा में तुलनाकर्ता नहीं देखा है, तुलना करने के लिए तुलनात्मक तुलना में क्या अंतर है? –

+0

@ फ़ेलिक्स, आप एक निश्चित प्रकार की सूची को सॉर्ट करने के वैकल्पिक माध्यम प्रदान करने के लिए कलेक्शन इंटरफ़ेस को संग्रह .sort के अतिरिक्त तर्क के रूप में उपयोग कर सकते हैं। आखिरकार, एक तुलनात्मक ऑब्जेक्ट में केवल एक/एक/तुलना करने की विधि हो सकती है, इसलिए यदि आप विभिन्न तरीकों से वस्तुओं की एक सूची सॉर्ट करना चाहते हैं, तो आपको तुलनात्मक इंटरफ़ेस का उपयोग करना होगा। – fwielstra

-3

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

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

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

+0

इस प्रश्न का उत्तर देने की कुंजी "रिक्त स्थान" के अर्थ के साथ आ रही है जो संदर्भ में किसी प्रकार की समझ बनाती है। –

1

आप कोशिश कर सकते हैं:

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

या:

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

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

संबंधित मुद्दे