উত্তর:
এটি জাভা অভ্যন্তরীণ কোড ব্যবহার করে (অন্যান্য compare
পদ্ধতিতে):
public static boolean compare(String str1, String str2) {
return (str1 == null ? str2 == null : str1.equals(str2));
}
<0
, ==0
বা >0
অন্যটি তুলনায় কোনটি নিম্ন /
Objects.equals(Object, Object)
মার্ক রোটভেল তার উত্তরে নির্দেশ করেছেন বলে ব্যবহার করার পরামর্শ দিচ্ছি (দয়া করে এটি উন্নত করুন)
জাভা 7 যেহেতু আপনি স্থিতিশীল পদ্ধতিটি java.util.Objects.equals(Object, Object)
দুটি বস্তুর সমতুল্য চেকগুলি সম্পাদন করতে সেগুলি সম্পর্কে যত্ন না নিয়েই ব্যবহার করতে পারেন null
।
উভয় বস্তু যদি null
তা হয় তবে তা ফিরে আসবে true
, যদি এক হয় null
এবং অন্যটি না হয় তবে তা ফিরে আসবে false
। অন্যথায় এটি equals
প্রথম বস্তুকে কল করার ফলাফলকে দ্বিতীয় হিসাবে আর্গুমেন্ট হিসাবে ফিরিয়ে দেবে ।
Object.equals(Object)
কোনও কম্পাইল টাইম চেক নেই। Objects.equals(Object, Object)
খুব স্বাভাবিক হিসাবে একই কাজ করে equals
, এবং পুনরায় অনুমান / আইডিই দ্বারা চেক, যারা নিয়ম যে জন্য সমর্থিত হবে হিউরিস্টিক হয় Objects.equals(Object, Object)
(যেমন IntelliJ আইডিয়া 2016,2 উভয় স্বাভাবিক সমান এবং বস্তু থেকে এক জন্য একই চেক আছে)।
এই ক্ষেত্রে অ্যাপাচি কমন্স স্ট্রিংগিলস # সমান ব্যবহার করা আরও ভাল হবে , এটি ইতিমধ্যে নাল স্ট্রিংগুলি পরিচালনা করে। কোড নমুনা:
public boolean compare(String s1, String s2) {
return StringUtils.equals(s1, s2);
}
যদি আপনি আছে আত গ্রন্থাগার যুক্ত করতে চান তাহলে, শুধু কপি সোর্স কোড এর StringUtils#equals
পদ্ধতি এবং এটি প্রয়োগ যখন আপনি এটি প্রয়োজন।
অ্যান্ড্রয়েডে যারা আছেন, যারা এপিআই 19 এর অবজেক্টস.সেস্কালগুলি (টিআর 1, আরআর 2) ব্যবহার করতে পারবেন না তাদের জন্য এটি রয়েছে:
android.text.TextUtils.equals(str1, str2);
এটি নাল নিরাপদ। এটি খুব কমই আরও ব্যয়বহুল স্ট্রিং.ইকোয়ালস () পদ্ধতি ব্যবহার করতে হবে কারণ অ্যান্ড্রয়েডের অভিন্ন স্ট্রিংগুলি প্রায়শই "==" অ্যান্ড্রয়েডের স্ট্রিং পুলিংয়ের জন্য অপারেন্ডের সাথে সত্যের তুলনা করে , এবং দৈর্ঘ্যের চেকগুলি বেশিরভাগ অমিলগুলি ফিল্টার করার জন্য একটি দ্রুত উপায়।
সোর্স কোড:
/**
* Returns true if a and b are equal, including if they are both null.
* <p><i>Note: In platform versions 1.1 and earlier, this method only worked well if
* both the arguments were instances of String.</i></p>
* @param a first CharSequence to check
* @param b second CharSequence to check
* @return true if a and b are equal
*/
public static boolean equals(CharSequence a, CharSequence b) {
if (a == b) return true;
int length;
if (a != null && b != null && (length = a.length()) == b.length()) {
if (a instanceof String && b instanceof String) {
return a.equals(b);
} else {
for (int i = 0; i < length; i++) {
if (a.charAt(i) != b.charAt(i)) return false;
}
return true;
}
}
return false;
}
সংস্করণ 3.5 অ্যাপাচি কমন্স স্ট্রিং ইউটিলে নিম্নলিখিত পদ্ধতি রয়েছে:
static int compare(String str1, String str2)
static int compare(String str1, String str2, boolean nullIsLess)
static int compareIgnoreCase(String str1, String str2)
static int compareIgnoreCase(String str1, String str2, boolean nullIsLess)
এগুলি নাল নিরাপদ স্ট্রিং তুলনা সরবরাহ করে।
জাভা 8 ব্যবহার করে :
private static Comparator<String> nullSafeStringComparator = Comparator
.nullsFirst(String::compareToIgnoreCase);
private static Comparator<Metadata> metadataComparator = Comparator
.comparing(Metadata::getName, nullSafeStringComparator)
.thenComparing(Metadata::getValue, nullSafeStringComparator);
public int compareTo(Metadata that) {
return metadataComparator.compare(this, that);
}
অ্যাপাচি কমন্স স্ট্রিংইটিস ক্লাসের সমান (-, -) এবং সমতুল্য আইগনোর কেস (-, -) পদ্ধতি ব্যবহার করে দুটি স্ট্রিংয়ের তুলনা করুন।
স্ট্রিংইটিলস.ইকুয়ালস (-, -) :
StringUtils.equals(null, null) = true
StringUtils.equals(null, "abc") = false
StringUtils.equals("abc", null) = false
StringUtils.equals("abc", "abc") = true
StringUtils.equals("abc", "ABC") = false
স্ট্রিংইটিলস.ইক্যুয়ালস আইগনোর কেস (-, -) :
StringUtils.equalsIgnoreCase(null, null) = true
StringUtils.equalsIgnoreCase(null, "abc") = false
StringUtils.equalsIgnoreCase("xyz", null) = false
StringUtils.equalsIgnoreCase("xyz", "xyz") = true
StringUtils.equalsIgnoreCase("xyz", "XYZ") = true
আপনি java.util.Objects
নিম্নলিখিত হিসাবে ব্যবহার করতে পারেন ।
public static boolean compare(String str1, String str2) {
return Objects.equals(str1, str2);
}
boolean compare(String str1, String str2) {
if(str1==null || str2==null) {
//return false; if you assume null not equal to null
return str1==str2;
}
return str1.equals(str2);
}
এটা কি আপনি চেয়েছিলেন?
false
উভয় স্ট্রিংগুলিই null
পছন্দসই ফলাফল নাও হলে এই কেসটি ফিরে আসে returns
ঠিক আছে, সুতরাং "সর্বোত্তম সম্ভাব্য সমাধান" এর অর্থ কী?
যদি আপনি সর্বাধিক পঠনযোগ্য বোঝাতে চান, তবে অভিজ্ঞ সমস্ত জাভা প্রোগ্রামারের জন্য সমস্ত সম্ভাব্য সমাধানগুলি বেশ সমান। তবে আইএমও সবচেয়ে পঠনযোগ্য এটি
public boolean compareStringsOrNulls(String str1, String str2) {
// Implement it how you like
}
অন্য কথায়, বাস্তবায়নটি একটি সাধারণ পদ্ধতির ভিতরে লুকিয়ে রাখুন যা (আদর্শভাবে) অন্তর্ভুক্ত হতে পারে।
(আপনি যদি কোনও তৃতীয় পক্ষের ইউটিলিটি লাইব্রেরিতে "আউটসোর্স" করতে পারেন ... আপনি যদি ইতিমধ্যে এটি আপনার কোডবেসে ব্যবহার করেন তবে)
আপনি যদি সর্বাধিক পারফরম্যান্ট বলতে চান তবে:
null
যুক্তিগুলির উপস্থিতির আপেক্ষিক (গতিশীল) ফ্রিকোয়েন্সি ,