কোনও গৃহস্থালি খালি জায়গার সমান কিনা তা কীভাবে পরীক্ষা করবেন?


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) ওরফে এসপি বলতে চান তবে:

    if (ch == ' ') {
        // ...
    }
  • আপনি যদি কোনও theতিহ্যবাহী ASCII সাদা স্থানের অক্ষর (এসপি, এইচটি, ভিটি, সিআর, এনএল) বোঝাতে চান তবে:

    if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' || ch == '\x0b') {
        // ...
    }
  • আপনি যদি কোনও ইউনিকোড শ্বেতস্থান চরিত্রটি বোঝাতে চান তবে:

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

নোট করুন যে ইউনিকোড হোয়াইটস্পেসে অতিরিক্ত এএসসিআইআই নিয়ন্ত্রণ কোড এবং উচ্চতর কোড প্লেনে কিছু অন্যান্য ইউনিকোড অক্ষর রয়েছে; জন্য 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 == ' ')


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মান আছে যে মান আছে ""। পরেরটির অর্থ "এর মধ্যে কোনও অক্ষর নেই" এমন একটি স্ট্রিং। এটি কোনও চরিত্রের সাথে মেলে না।
স্টিফেন সি

এই প্রশ্নের উত্তরের মূল চাবিকাঠি "খালি স্থান" এর অর্থ নিয়ে আসছে যা প্রসঙ্গে কিছুটা অর্থবোধ করে।
স্টিফেন সি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.