জাভাতে নুলের বিরুদ্ধে স্ট্রিং কীভাবে চেক করবেন?


93

আমি জাভাতে নুলের বিরুদ্ধে একটি স্ট্রিং কীভাবে পরীক্ষা করতে পারি? আমি ব্যাবহার করছি

stringname.equalsignorecase(null)

কিন্তু এটি কাজ করে না

উত্তর:


165

string == nullবস্তুটি নাল হলে তুলনা করুন। string.equals("foo")object বস্তুর অভ্যন্তরের মানটির তুলনা করে। string == "foo"সর্বদা কাজ করে না, কারণ আপনি দেখার চেষ্টা করছেন যে বস্তুগুলি একই, না তাদের মান উপস্থাপন করে।


দীর্ঘ উত্তর:

আপনি যদি এটি চেষ্টা করেন তবে এটি কার্যকর হবে না, যেমনটি আপনি পেয়েছেন:

String foo = null;
if (foo.equals(null)) {
    // That fails every time. 
}

কারণটি হ'ল foo নাল, তাই এটি জানে না qu .aquals থেকে কল করার জন্য সেখানে কোনও আপত্তি নেই।

আপনি সম্ভবত যা চেয়েছিলেন তা হ'ল:

String foo = null;
if (foo == null) {
    // That will work.
}

স্ট্রিংসের সাথে কাজ করার সময় নিজেকে নাল থেকে রক্ষা করার সাধারণ উপায় হ'ল:

String foo = null;
String bar = "Some string";
...
if (foo != null && foo.equals(bar)) {
    // Do something here.
}

এইভাবে, যদি foo শূন্য হয়, এটি শর্তাধীন দ্বিতীয়ার্ধের মূল্যায়ন করে না এবং জিনিসগুলি ঠিক আছে।

সহজ উপায়, যদি আপনি স্ট্রিং আক্ষরিক (কোনও পরিবর্তকের পরিবর্তে) ব্যবহার করেন তবে তা হ'ল:

String foo = null;
...
if ("some String".equals(foo)) {
    // Do something here.
}

আপনি যদি এটিকে ঘিরে কাজ করতে চান তবে অ্যাপাচি কমন্সের একটি ক্লাস রয়েছে - স্ট্রিং ইউটিলস - যা নাল-সেফ স্ট্রিং ক্রিয়াকলাপ সরবরাহ করে।

if (StringUtils.equals(foo, bar)) {
    // Do something here.
}

আর একটি প্রতিক্রিয়া রসিকতা করছিল, এবং বলেছিল যে আপনার এটি করা উচিত:

boolean isNull = false;
try {
    stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
    isNull = true;
}

দয়া করে এটি করবেন না। ব্যতিক্রমী ত্রুটিগুলির জন্য আপনাকে কেবল ব্যতিক্রম ছুঁড়ে ফেলা উচিত; যদি আপনি শূন্যতার প্রত্যাশা করে থাকেন তবে আপনার আগে সময়ের জন্য এটি পরীক্ষা করা উচিত, এবং এটি ব্যতিক্রম ছোঁড়াতে দেওয়া উচিত নয়।

আমার মাথায়, এটির জন্য দুটি কারণ রয়েছে। প্রথমত, ব্যতিক্রমগুলি ধীর; শূন্যের বিরুদ্ধে পরীক্ষা করা দ্রুত, তবে জেভিএম যখন ব্যতিক্রম ছুঁড়ে ফেলে, তখন অনেক সময় লাগে। দ্বিতীয়ত, কোডটি পড়া এবং বজায় রাখা আরও সহজ যদি আপনি সময়ের আগে নাল পয়েন্টারটি পরীক্ষা করে থাকেন তবে।


4
আপনি যোদা সংস্করণটি মিস করেছেন, প্রতিবারেও কাজ করে: যদি ("foo" .EqualsIgnoreCase (স্ট্রিং))
ওমরি ইয়াদান

4
চমৎকার সহায়ক ব্যাখ্যা। সুন্দর খেলার জন্য ধন্যবাদ।
james.garriss

@ আইউব আমি কি মনে করি আমরা একমত হই? আপনি যদি আরও পরিষ্কার হতে পারেন তবে সম্পাদনা করে খুশি glad
ডিন জে

31
s == null

কাজ করবে না?


4
@ কে 38: আপনি equals()যদি মানগুলি তুলনা করতে চান তবে আপনাকে "কেবল" ব্যবহার করতে হবে । তবে আপনি যদি ভেরিয়েবল কিনা তা পরীক্ষা করতে চান তবে nullআপনি ব্যবহার করুন ==
ফেলিক্স ক্লিং

18

অবশ্যই এটি কাজ করে। আপনি কোডের একটি অতীব গুরুত্বপূর্ণ অংশ মিস করছেন আপনার ঠিক এটি করা দরকার:

boolean isNull = false;
try {
    stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
    isNull = true;
}

;)


25
আপনি যদি এতদূর পড়ে থাকেন তবে অনুগ্রহ করে বুঝতে পারেন যে @ আইউব মজা করছেন; আপনার এভাবে করা উচিত হবে না।
ডিন জে

12

আপনি যদি অ্যান্ড্রয়েডে কাজ করছেন তবে টেক্সটইটিস পদ্ধতিটি ব্যবহার করুন।

TextUtils.isEmpty (str) : স্ট্রিংটি নাল বা 0-দৈর্ঘ্যের হলে সত্যটি ফেরত দেয়। পরামিতি: স্ট্রিং পরীক্ষা করা হবে রিটার্ন: সত্য যদি str নাল হয় বা শূন্য দৈর্ঘ্য

  if(TextUtils.isEmpty(str)) {
        // str is null or lenght is 0
    }

নীচে এই পদ্ধতির সোর্স কোড রয়েছে You আপনি ডাইরেক্টলিটি ব্যবহার করতে পারেন।

 /**
     * Returns true if the string is null or 0-length.
     * @param str the string to be examined
     * @return true if str is null or zero length
     */
    public static boolean isEmpty(CharSequence str) {
        if (str == null || str.length() == 0)
            return true;
        else
            return false;
    }

5

যদি আমরা সমতুল্য আইজেনের কেস পদ্ধতির বাস্তবায়নটি দেখি তবে আমরা এই অংশটি পাই:

if (string == null || count != string.count) {
    return false;
}

সুতরাং falseযুক্তি থাকলে এটি সর্বদা ফিরে আসবে null। এবং এটি স্পষ্টতই সঠিক, কারণ এটিই কেবল ফিরে আসতে trueহবে যখন সমান ইগনোরকেসকে একটিতে অনুরোধ করা হয়েছিল null String, তবে

String nullString = null;
nullString.equalsIgnoreCase(null);

অবশ্যই একটি নালপয়েন্টার এক্সসেপশন ফলাফল করবে।

সুতরাং সমান পদ্ধতিগুলি কোনও বস্তু নাল কিনা তা পরীক্ষা করার জন্য ডিজাইন করা হয়নি, কেবল কারণ আপনি সেগুলি চালিত করতে পারেন না null


4

এটি কিছুটা অদ্ভুত লাগছে, তবে ...

stringName == null || "".equals(stringName)

এইভাবে এটি করার ক্ষেত্রে কখনও কোনও সমস্যা হয়নি, ততক্ষণ সম্ভাব্য নাল পয়েন্টগুলি ব্যতিক্রম করার সময় এটি পরীক্ষা করা নিরাপদ।


এই ক্ষেত্রে নালপয়েন্টার সম্পর্কে সাবধান থাকুন দ্বিতীয় শর্তটি প্রথম হওয়া উচিত।
পবন

3

আমি নিশ্চিত না যে এমওয়াইওয়াইনের উত্তরটি দিয়ে কী ভুল হয়েছিল।

if (yourString != null) {
  //do fun stuff with yourString here
}

উপরের নাল চেকটি বেশ ঠিক আছে।

যদি আপনি যাচাই করার চেষ্টা করছেন যে কোনও স্ট্রিং রেফারেন্স অন্য স্ট্রিংয়ের সাথে সমান (কেস উপেক্ষা করে) করা হয়েছে যা আপনি জানেন যে নাল রেফারেন্স নয়, তবে এই জাতীয় কিছু করুন:

String x = "this is not a null reference"
if (x.equalsIgnoreCase(yourStringReferenceThatMightBeNull) ) {
  //do fun stuff
}

আপনি যে দুটি স্ট্রিংয়ের সাথে তুলনা করছেন তার নাল রেফারেন্স রয়েছে কিনা তা নিয়ে যদি সন্দেহ থাকে তবে নালপয়েন্টার এক্সসেপশন হওয়ার সম্ভাবনা এড়াতে আপনাকে কমপক্ষে একটিতে নাল রেফারেন্সের জন্য পরীক্ষা করতে হবে।


2

যদি আপনার স্ট্রিংয়ের "নাল" মান থাকে তবে আপনি ব্যবহার করতে পারেন

if(null == stringName){

  [code]

}

else

[Error Msg]

4
নাল == স্ট্রিংনাম এবং স্ট্রিংনেম == নাল নয় কেন? আমি ধরে নিই যে এর চেয়ে বেশি পার্থক্য নেই তবে কেন এটি পছন্দ করা হয় (এবং আমি এটি অনেক বেশি দেখেছি)। আমার অগ্রাধিকারটি LTR যাতে স্ট্রিংনেম == নাল পড়ার তবে অন্য লোকেরা কী মনে করে তা জানতে চাই।
লুকাসজ 'সেভেরিয়ান' গ্রেলা

7
সাধারণত তুলনার তুলনায় আপনি ভেরিয়েবলটি ডানদিকে রেখে দেন, যাতে আপনি ভেরিয়েবলটি ভুলতে আরম্ভ করতে পারবেন না: নাল = স্ট্রিংনেম একটি সংকলন ত্রুটি তৈরি করে যখন স্ট্রিংনেম = নাল সম্ভব হত
সারাজোগ

4
এটি একেবারেই করা "সাধারণ" নয় এবং কোড বেসটি পড়া কারও পক্ষে এটি স্বাভাবিকভাবে পাঠযোগ্য নয় বলে অনেক লোক এটিকে স্পষ্টভাবে নিষেধ করে।
রিচিএইচএইচ

2

এটি আপনার ক্লাসে আমদানি করুন

import org.apache.commons.lang.StringUtils;

তারপরে এটি ব্যবহার করুন, তারা উভয়ই সত্য ফিরে আসবে

System.out.println(StringUtils.isEmpty(""));
System.out.println(StringUtils.isEmpty(null)); 

2

আপনি স্ট্রিং == নাল দিয়ে চেক করতে পারেন

এটি আমার পক্ষে কাজ করে

    String foo = null;
    if(foo == null){
        System.out.println("String is null");
    }

1

অবশ্যই ব্যবহারকারী 351809, stringname.equalsignorecase(null)নালপয়েন্টার এক্সসেপশন নিক্ষেপ করবে।
দেখুন, আপনার কাছে একটি স্ট্রিং অবজেক্ট রয়েছে stringnameযা 2 টি সম্ভাব্য শর্ত অনুসরণ করে:

  1. stringnameকিছু নন-নাল স্ট্রিং মান রয়েছে ("কম্পিউটার" বলুন):
    আপনার কোডটি ফর্মটি নেওয়ার সাথে সাথে এটি ঠিক কাজ করবে
    "computer".equalsignorecase(null)
    এবং আপনি যেমন প্রত্যাশিত প্রতিক্রিয়া পাবেন false
  2. stringnameএকটি nullমান আছে:
    এখানে আপনার কোডটি আটকে যাবে,
    null.equalsignorecase(null)
    তবে, প্রথম দেখায় ভাল বলে মনে হচ্ছে এবং আপনি প্রতিক্রিয়া হিসাবে আশা করতে পারেন true,
    তবে, পদ্ধতিটি nullকার্যকর করতে পারে এমন কোনও বস্তু নয় equalsignorecase()

সুতরাং, আপনি কেস 2 এর কারণে ব্যতিক্রম পেয়েছেন
I আমি আপনাকে যা পরামর্শ দিচ্ছি তা হ'ল সহজভাবে ব্যবহার করাstringname == null



1

যদি valueপ্রত্যাবর্তন শূন্য হয়, ব্যবহার করুন:

if(value.isEmpty());

কিছু সময় নাল পরীক্ষা করার জন্য, if(value == null)জাভাতে, এটি স্ট্রিং নাল হলেও সত্যটি দিতে পারে না।


4
স্কেল ব্যবহার করে (জাভা সহ) if(value.isEmpty())দেয় NullPointerException। এই ক্ষেত্রে আরও ভাল ব্যবহার করা হচ্ছেif(value == null)
Andrea

এটি স্পষ্টতই ভুল কারণ এটি সর্বদা শূন্য হলে এনপিই নিক্ষেপ করবে।
রজার


0

আমি বুঝতে পেরেছিলাম যে এর জবাব অনেক দিন আগে দেওয়া হয়েছিল, কিন্তু আমি এই পোস্টটি দেখিনি, তাই আমি ভেবেছিলাম আমি কী করব তা ভাগ করে নিই। কোড পাঠযোগ্যতার জন্য এটি বিশেষভাবে ভাল নয় তবে আপনি যদি নাল চেকের একটি সিরিজ করতে থাকেন তবে আমি এটি ব্যবহার করতে চাই:

String someString = someObject.getProperty() == null ? "" : someObject.getProperty().trim();

এই উদাহরণে, স্ট্রিমের উপরে ট্রিমকে ডাকা হয়, যা স্ট্রিংটি শূন্য বা ফাঁকা থাকলে একটি এনপিই নিক্ষেপ করবে তবে একই লাইনে আপনি নাল বা ফাঁকাটি পরীক্ষা করতে পারেন যাতে আপনি এক টন শেষ না করে (আরও কিছু) ) ব্লক করে ফর্ম্যাট করা কঠিন।


নাল বা ফাঁকা জন্য আপনি কি বোঝার অর্থ? আপনি এখানে কেবল শূন্যের জন্য পরীক্ষা করছেন। ফাঁকা "কন্ড? এ: বি;" এর সম্ভাব্য রিটার্নগুলির মধ্যে একটি; ঠিক আছে?
ফিলো ভাইভেরো

0

আমি যদি সঠিকভাবে বুঝতে পারি তবে এটি করা উচিত:

if(!stringname.isEmpty())
// an if to check if stringname is not null
if(stringname.isEmpty())
// an if to check if stringname is null

-2

ঠিক আছে, শেষবারের মতো কেউ এই নির্বোধ প্রশ্ন জিজ্ঞাসা করেছিল, উত্তরটি ছিল:

someString.equals("null")

যদিও এই "ফিক্স" প্রথম স্থানে কীভাবে nullহয় তার বড় সমস্যাটি কেবল আড়াল করে "null"


এটি হয় না - সুতরাং এটি কোনও স্থির নয় এবং একটি দরকারী উত্তর নয়।
ক্রিস স্ট্রাটন

আমি প্রথম বলতে চাই: "ওয়াট"
ফিলিও ভাইভেরো

এটি প্রশ্নের উত্তর দেয় না
জেসন অ্যাডামস

-2

এটি করার দুটি উপায় আছে .. স্ট্রিং বলুন == নাল বা স্ট্রিং.কুইয়েলস () ..

public class IfElse {

    public int ifElseTesting(String a){
        //return null;
        return (a== null)? 0: a.length();
    }

}

public class ShortCutifElseTesting {

    public static void main(String[] args) {

        Scanner scanner=new Scanner(System.in);
        System.out.println("enter the string please:");
        String a=scanner.nextLine();
        /*
        if (a.equals(null)){
            System.out.println("you are not correct");
        }
        else if(a.equals("bangladesh")){
            System.out.println("you are right");
        }
        else
            System.out.println("succesful tested");

        */
        IfElse ie=new IfElse();
        int result=ie.ifElseTesting(a);
        System.out.println(result);

    }

}

এই উদাহরণটি দেখুন .. এখানে শর্টকাট সংস্করণের অন্য একটি উদাহরণ যদি অন্য ..


4
না! .equals () অবশ্যই কোনও নাল বস্তুর সাথে ব্যবহার করা উচিত নয়, সুতরাং প্রারম্ভিক ব্যাখ্যাটি ভুল হয়েছে। এবং এই উত্তরটির বাকী অংশটি জিজ্ঞাসিত প্রশ্নের সাথে অর্থহীন এবং সম্পর্কিত নয় বলে মনে হচ্ছে।
ক্রিস স্ট্রাটন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.