কোনও স্ট্রিং নাল এবং খালি নয় কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?
public void doStuff(String str)
{
if (str != null && str != "**here I want to check the 'str' is empty or not**")
{
/* handle empty string */
}
/* ... */
}
কোনও স্ট্রিং নাল এবং খালি নয় কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?
public void doStuff(String str)
{
if (str != null && str != "**here I want to check the 'str' is empty or not**")
{
/* handle empty string */
}
/* ... */
}
উত্তর:
ইস্পটি () সম্পর্কে কী ?
if(str != null && !str.isEmpty())
&&
এই ক্রমের অংশগুলি ব্যবহার করার বিষয়ে নিশ্চিত হন , কারণ জাভা দ্বিতীয় অংশটি মূল্যায়ন করতে অগ্রসর হবে না যদি প্রথম অংশটি &&
ব্যর্থ হয়, সুতরাং এটি নিশ্চিত করে যে আপনি যদি নাল হয় str.isEmpty()
তবে কোনও নাল পয়েন্টার ব্যতিক্রম পাবেন না str
।
সাবধান, এটি কেবল জাভা SE 1.6 থেকে উপলব্ধ। আপনাকে str.length() == 0
পূর্ববর্তী সংস্করণগুলি পরীক্ষা করতে হবে।
হোয়াইটস্পেসও উপেক্ষা করার জন্য:
if(str != null && !str.trim().isEmpty())
(যেহেতু জাভা ১১ str.trim().isEmpty()
হ্রাস করা যেতে পারে str.isBlank()
যা অন্যান্য ইউনিকোড সাদা জায়গাগুলির জন্যও পরীক্ষা করবে)
একটি কার্যকর ফাংশনে আবৃত:
public static boolean empty( final String s ) {
// Null-safe, short-circuit evaluation.
return s == null || s.trim().isEmpty();
}
হয়ে:
if( !empty( str ) )
isEmpty()
একটি স্ট্রিং উদাহরণ প্রয়োজন বলে মনে হচ্ছে (অ স্থির)। নাল রেফারেন্সে এটি শুরু করা একটি নালপয়েন্টার এক্সসেপশন নিক্ষেপ করবে।
TextUtils.isEmpty(String)
খালি বা নাল স্ট্রিং চেক করতে ব্যবহার করার পরামর্শ দিচ্ছি । সুন্দর এবং সংক্ষিপ্ত। টেক্সটইটিস ক্লাসটি অ্যান্ড্রয়েড এসডিকে-র একটি অংশ।
(str != null && str.length() > 0)
।
আমি এই ধরণের জিনিসগুলির জন্য অ্যাপাচি কমন্স-ল্যাং এবং বিশেষত স্ট্রিংগিলস ইউটিলিটি শ্রেণি ব্যবহার করতে চাই :
import org.apache.commons.lang.StringUtils;
if (StringUtils.isNotBlank(str)) {
...
}
if (StringUtils.isBlank(str)) {
...
}
isEmpty
বা isBlank
, সম্ভবত কোনও তৃতীয় পক্ষের লাইব্রেরি অন্তর্ভুক্ত করা দরকারী নয়। এই জাতীয় পদ্ধতি সরবরাহের জন্য আপনি কেবল নিজের ইউটিলিটি ক্লাস তৈরি করতে পারেন। যাইহোক, বোঝো ব্যাখ্যা হিসাবে, commons-lang
প্রকল্পটি অনেকগুলি ব্যবহারযোগ্য পদ্ধতি সরবরাহ করে!
StringUtils.isNotBlank(str)
নাল-চেকিংও করে না।
এখানে কেবল অ্যান্ড্রয়েড যুক্ত করুন:
import android.text.TextUtils;
if (!TextUtils.isEmpty(str)) {
...
}
@ বি জর্ন এবং @ সানপ্যাট্রিকফ্লয়েডে যুক্ত করার জন্য এই পেয়ারার উপায়টি হল:
Strings.nullToEmpty(str).isEmpty();
// or
Strings.isNullOrEmpty(str);
কমন্স ল্যাং অনেক সময়ে আরও বেশি পঠনযোগ্য তবে আমি পেয়ারাটির উপর আস্তে আস্তে নির্ভর করে চলেছি প্লাস কখনও কখনও কমন্স ল্যাং বিভ্রান্ত হয় যখন এটি আসে isBlank()
(হোয়াইটস্পেসে কি আছে তা হিসাবে)।
কমারস ল্যাংয়ের পেয়ারাটির সংস্করণটি হ'ল isBlank
:
Strings.nullToEmpty(str).trim().isEmpty()
আমি কোডটি বলব যা অনুমতি দেয় না ""
(খালি) এবং null
এটি সন্দেহজনক এবং সম্ভাব্য বগি কারণ এটি সম্ভবত এমন সমস্ত ক্ষেত্রে পরিচালনা করে না যেখানে মঞ্জুরি দেয় না null
(যদিও এসকিউএলের জন্য আমি বুঝতে পারি এসকিউএল / এইচকিউএল সম্পর্কে উদ্ভট কারণ ''
)।
str != null && str.length() != 0
অন্যথায়
str != null && !str.equals("")
অথবা
str != null && !"".equals(str)
দ্রষ্টব্য: দ্বিতীয় চেক (প্রথম এবং দ্বিতীয় বিকল্প) ধরে নেওয়া হয় যে str নਾਲ নয়। এটি ঠিক আছে কারণ প্রথম চেকটি সেই কাজটি করছে (এবং জাভা যদি প্রথমটি মিথ্যা হয় তবে দ্বিতীয় চেকটি করে না)!
গুরুত্বপূর্ণ: স্ট্রিং সমতার জন্য == ব্যবহার করবেন না। == পয়েন্টারটি সমান, পরীক্ষা করে না। দুটি স্ট্রিং বিভিন্ন মেমরি অ্যাড্রেসে (দুটি উদাহরণ) হতে পারে তবে একই মান থাকতে পারে!
আমি জানি প্রায় প্রতিটি লাইব্রেরি একটি ইউটিলিটি ক্লাস নামক সংজ্ঞা দেয় StringUtils
, StringUtil
বা StringHelper
, এবং এগুলিতে সাধারণত আপনি যে পদ্ধতিটি সন্ধান করছেন তা অন্তর্ভুক্ত থাকে।
আমার ব্যক্তিগত প্রিয় অ্যাপাচি কমন্স / ল্যাং , যেখানে স্ট্রিং ইউটিলস ক্লাসে আপনি উভয়ই পাবেন
(প্রথমটি পরীক্ষা করে যে কোনও স্ট্রিং নাল বা ফাঁকা, দ্বিতীয়টি এটি কেবল নাল, খালি বা সাদা স্থান কিনা তা পরীক্ষা করে দেখুন)
স্প্রিং, উইকেট এবং অন্যান্য অনেকগুলি লিবিজে একই জাতীয় ইউটিলিটি ক্লাস রয়েছে। আপনি যদি বাহ্যিক গ্রন্থাগার ব্যবহার না করেন তবে আপনি নিজের প্রকল্পে একটি স্ট্রিং ইউটিলস শ্রেণি প্রবর্তন করতে চাইতে পারেন।
আপডেট করুন: অনেক বছর পার হয়ে গিয়েছে, আর এই দিন আমি ব্যবহার বলতে চাই পেয়ারা এর Strings.isNullOrEmpty(string)
পদ্ধতি।
এটি আমার পক্ষে কাজ করে:
import com.google.common.base.Strings;
if (!Strings.isNullOrEmpty(myString)) {
return myString;
}
যদি প্রদত্ত স্ট্রিংটি নাল হয় বা খালি স্ট্রিং হয় তবে সত্যটি ফিরে আসে।
নালটোএম্পটির সাথে আপনার স্ট্রিং রেফারেন্সগুলিকে স্বাভাবিক করার কথা বিবেচনা করুন। যদি আপনি এটি করেন তবে আপনি এই পদ্ধতির পরিবর্তে String.isEmpty () ব্যবহার করতে পারেন এবং আপনার স্ট্রিং. টুঅপারসেসের মতো পদ্ধতিগুলির বিশেষ নাল-নিরাপদ ফর্মগুলির প্রয়োজন হবে না। অথবা, যদি আপনি খালি স্ট্রিংগুলি শূন্যে রূপান্তর করে "অন্যদিকে" স্বাভাবিক করতে চান তবে আপনি খালি টননুল ব্যবহার করতে পারেন।
কেমন:
if(str!= null && str.length() != 0 )
&&
চালিত করবে না যদি str == নাল, এভাবে একটি নালপয়েন্টার এক্সসেপশনকে আটকাবে। (উত্স: আমি কেবল চেষ্টা করেছি)
অ্যাপাচি স্ট্রিংটিলস 'এর নটব্ল্যাঙ্ক পদ্ধতিটি ব্যবহার করুন
StringUtils.isNotBlank(str)
এটি কেবল সত্যটি ফিরে আসবে যদি স্ট্র নাল না থাকে এবং খালি না থাকে।
আপনার ব্যবহার করা উচিত org.apache.commons.lang3.StringUtils.isNotBlank()
বা org.apache.commons.lang3.StringUtils.isNotEmpty
। এই দুইয়ের মধ্যে সিদ্ধান্ত আপনি যা যাচাই করতে চান তার উপর ভিত্তি করে।
IsNotBlank () চেক যে ইনপুট প্যারামিটার:
IsNotEmpty () চেক শুধুমাত্র যে ইনপুট প্যারামিটার
ইনপুটের ভিত্তিতে সত্য বা মিথ্যা প্রত্যাবর্তন করে
Predicate<String> p = (s)-> ( s != null && !s.isEmpty());
p.test(string);
আপনি যদি পুরো লাইব্রেরিটি অন্তর্ভুক্ত করতে না চান; আপনি যে কোডটি চান তা কেবল অন্তর্ভুক্ত করুন। আপনার নিজের এটি বজায় রাখতে হবে; তবে এটি একটি দুর্দান্ত সোজা এগিয়ে ফাংশন। এখানে এটি Commons.apache.org থেকে অনুলিপি করা হয়েছে
/**
* <p>Checks if a String is whitespace, empty ("") or null.</p>
*
* <pre>
* StringUtils.isBlank(null) = true
* StringUtils.isBlank("") = true
* StringUtils.isBlank(" ") = true
* StringUtils.isBlank("bob") = false
* StringUtils.isBlank(" bob ") = false
* </pre>
*
* @param str the String to check, may be null
* @return <code>true</code> if the String is null, empty or whitespace
* @since 2.0
*/
public static boolean isBlank(String str) {
int strLen;
if (str == null || (strLen = str.length()) == 0) {
return true;
}
for (int i = 0; i < strLen; i++) {
if ((Character.isWhitespace(str.charAt(i)) == false)) {
return false;
}
}
return true;
}
এটি কিছুটা দেরি হয়ে গেছে তবে এখানে যাচাইয়ের কার্যকরী শৈলী:
Optional.ofNullable(str)
.filter(s -> !(s.trim().isEmpty()))
.ifPresent(result -> {
// your query setup goes here
});
একটি নতুন পদ্ধতি আছে জাভা-11: String#isBlank
যদি স্ট্রিংটি খালি থাকে বা কেবলমাত্র সাদা স্থান কোডপয়েন্ট রয়েছে, অন্যথায় মিথ্যা হলে সত্যটি ফেরত দেয়।
jshell> "".isBlank()
$7 ==> true
jshell> " ".isBlank()
$8 ==> true
jshell> " ! ".isBlank()
$9 ==> false
Optional
স্ট্রিংটি নাল বা খালি কিনা তা পরীক্ষা করার জন্য এটি একত্রিত হতে পারে
boolean isNullOrEmpty = Optional.ofNullable(str).map(String::isBlank).orElse(true);
পরীক্ষাটি খালি স্ট্রিংয়ের সাথে সমান এবং একই শর্তাধীন নাল:
if(!"".equals(str) && str != null) {
// do stuff.
}
NullPointerException
আরআর নাল হলে ছোঁড়া হয় না , যেহেতু Object.equals()
আরগ থাকলে মিথ্যা ফেরত দেয় null
।
অন্য নির্মাণ str.equals("")
ভয়ঙ্কর নিক্ষেপ করবে NullPointerException
। কেউ কেউ স্ট্রিং আক্ষরিক ব্যবহারকে খারাপ হিসাবে বিবেচনা করতে পারে formequals()
বলা হয় তবে এটি কাজ করে।
এই উত্তরটিও দেখুন: https://stackoverflow.com/a/531825/1532705
str != null
। !"".equals(str)
ইতিমধ্যে কাজটি করছি
সানাইজার যেমন উপরে বলেছে, অ্যাপাচি স্ট্রিং ইউটিসগুলি এটির জন্য দুর্দান্ত, যদি আপনি পেয়ারা অন্তর্ভুক্ত করেন তবে আপনাকে নিম্নলিখিতগুলি করা উচিত;
public List<Employee> findEmployees(String str, int dep) {
Preconditions.checkState(StringUtils.isNotBlank(str), "Invalid input, input is blank or null");
/** code here **/
}
আমিও আপনাকে সুপারিশ করতে পারি যে আপনি নিজের ফলাফলের কলামগুলি সূচকের পরিবর্তে নাম অনুসারে সেট করেছেন, এটি আপনার কোড বজায় রাখা আরও সহজ করে তুলবে।
আমি সম্পূর্ণ বিবরণী না দিয়ে একবারে কয়েকটি স্ট্রিং একবারে পরীক্ষা করার জন্য আমার নিজের ইউটিলিটি ফাংশনটি তৈরি করেছি if(str != null && !str.isEmpty && str2 != null && !str2.isEmpty)
। এটি ফাংশন:
public class StringUtils{
public static boolean areSet(String... strings)
{
for(String s : strings)
if(s == null || s.isEmpty)
return false;
return true;
}
}
সুতরাং আমি কেবল লিখতে পারি:
if(!StringUtils.areSet(firstName,lastName,address)
{
//do something
}
areSet(String... strings)
তারপরে অ্যারে তৈরি না করেই আবেদন করা যেতে পারে:if(!StringUtils.areSet(firstName, lastName, address))
আপনি যদি জাভা 8 ব্যবহার করছেন এবং আরও কার্যকরী প্রোগ্রামিং পদ্ধতিকে চান, আপনি Function
নিয়ন্ত্রণটি পরিচালনা করতে পারেন এবং তারপরে আপনি এটি পুনরায় ব্যবহার করতে পারেন এবংapply()
যখনই প্রয়োজন হবে।
অনুশীলন করতে আসা, আপনি Function
হিসাবে সংজ্ঞায়িত করতে পারেন
Function<String, Boolean> isNotEmpty = s -> s != null && !"".equals(s)
তারপরে, আপনি কেবল apply()
পদ্ধতিটি কল করে এটি ব্যবহার করতে পারেন :
String emptyString = "";
isNotEmpty.apply(emptyString); // this will return false
String notEmptyString = "StackOverflow";
isNotEmpty.apply(notEmptyString); // this will return true
আপনি যদি পছন্দ করেন তবে আপনি এটি নির্ধারণ করতে পারেন যা খালি আছে Function
কিনা তা যাচাই করে String
এবং তার সাথে এটি তুচ্ছ করতে পারেন!
।
এক্ষেত্রে, Function
চেহারাটি এর মতো দেখাবে:
Function<String, Boolean> isEmpty = s -> s == null || "".equals(s)
তারপরে, আপনি কেবল apply()
পদ্ধতিটি কল করে এটি ব্যবহার করতে পারেন :
String emptyString = "";
!isEmpty.apply(emptyString); // this will return false
String notEmptyString = "StackOverflow";
!isEmpty.apply(notEmptyString); // this will return true
সঙ্গে জাভা 8 ঐচ্ছিক আপনি কি করতে পারেন:
public Boolean isStringCorrect(String str) {
return Optional.ofNullable(str)
.map(String::trim)
.map(string -> !str.isEmpty())
.orElse(false);
}
এই অভিব্যক্তিটিতে, আপনি String
স্থানগুলিও সমন্বিত সেগুলি পরিচালনা করবেন ।
আপনি স্ট্রিংইটিলস.আইএসপিটি () ব্যবহার করতে পারেন, স্ট্রিংটি নালাগুলি বা খালি থাকলে সত্য হয়ে যাবে।
String str1 = "";
String str2 = null;
if(StringUtils.isEmpty(str)){
System.out.println("str1 is null or empty");
}
if(StringUtils.isEmpty(str2)){
System.out.println("str2 is null or empty");
}
ফলাফল হবে
str1 নাল বা খালি empty
str2 টি নাল বা খালি
isNotBlank
আমি আপনার প্রকৃত প্রয়োজন অনুসারে পেয়ারা বা অ্যাপাচি কমন্সকে পরামর্শ দেব। আমার উদাহরণ কোডে বিভিন্ন আচরণ পরীক্ষা করে দেখুন:
import com.google.common.base.Strings;
import org.apache.commons.lang.StringUtils;
/**
* Created by hu0983 on 2016.01.13..
*/
public class StringNotEmptyTesting {
public static void main(String[] args){
String a = " ";
String b = "";
String c=null;
System.out.println("Apache:");
if(!StringUtils.isNotBlank(a)){
System.out.println(" a is blank");
}
if(!StringUtils.isNotBlank(b)){
System.out.println(" b is blank");
}
if(!StringUtils.isNotBlank(c)){
System.out.println(" c is blank");
}
System.out.println("Google:");
if(Strings.isNullOrEmpty(Strings.emptyToNull(a))){
System.out.println(" a is NullOrEmpty");
}
if(Strings.isNullOrEmpty(b)){
System.out.println(" b is NullOrEmpty");
}
if(Strings.isNullOrEmpty(c)){
System.out.println(" c is NullOrEmpty");
}
}
}
ফলাফল:
অ্যাপাচি:
একটি ফাঁকা
বি ফাঁকা
সি খালি
গুগল:
বি হ'ল নুলআরএম্পটি
সি হ'ল নলআরএম্পটি
সম্পূর্ণতার: আপনি হয় ইতিমধ্যে বসন্ত পরিকাঠামোকে ব্যবহার করে , StringUtils প্রদান পদ্ধতি
org.springframework.util.StringUtils.hasLength(String str)
রিটার্নস: স্ট্রিংটি নাল নয় এবং দৈর্ঘ্য থাকলে সত্য
পাশাপাশি পদ্ধতি
org.springframework.util.StringUtils.hasText(String str)
রিটার্নস: স্ট্রিংটি শূন্য না হলে সত্য, এর দৈর্ঘ্য 0 এর চেয়ে বেশি এবং এটিতে কেবল শ্বেত স্পেস থাকে না
সহজভাবে, সাদা স্থান পাশাপাশি উপেক্ষা:
if (str == null || str.trim().length() == 0) {
// str is empty
} else {
// str is not empty
}
আপনি যদি বসন্ত কাঠামো ব্যবহার করেন তবে আপনি পদ্ধতিটি ব্যবহার করতে পারেন:
org.springframework.util.StringUtils.isEmpty(@Nullable Object str);
এই পদ্ধতিটি কোনও অবজেক্টকে আর্গুমেন্ট হিসাবে গ্রহণ করে, একে নাল এবং খালি স্ট্রিংয়ের সাথে তুলনা করে। ফলস্বরূপ, এই পদ্ধতিটি কোনও নন-নাল-স্ট্রিং অবজেক্টের জন্য কখনই সত্য হয় না।
StringUtils
স্পষ্টভাবে "ফ্রেমওয়ার্কের অভ্যন্তরীণ ব্যবহারের জন্য; স্ট্রিং ইউটিলিটিগুলির আরও বিস্তৃত স্যুট জন্য অ্যাপাচি কমন্স ল্যাং বিবেচনা করুন states"
স্ট্রিংয়ে নাল হ্যান্ডেল করার ভাল উপায় হ'ল
str!=null && !str.equalsIgnoreCase("null") && !str.isEmpty()
সংক্ষেপে,
str.length()>0 && !str.equalsIgnoreCase("null")
কোনও বস্তুর সমস্ত স্ট্রিং বৈশিষ্ট্য খালি আছে কিনা তা পরীক্ষা করতে (ব্যবহারের পরিবর্তে! = জাভা প্রতিবিম্ব এপিআই পদ্ধতির অনুসরণ করে সমস্ত ক্ষেত্রের নামের উপর নাল
private String name1;
private String name2;
private String name3;
public boolean isEmpty() {
for (Field field : this.getClass().getDeclaredFields()) {
try {
field.setAccessible(true);
if (field.get(this) != null) {
return false;
}
} catch (Exception e) {
System.out.println("Exception occurred in processing");
}
}
return true;
}
সমস্ত স্ট্রিংয়ের ক্ষেত্রের মান ফাঁকা থাকলে এই পদ্ধতিটি সত্য হবে, যদি কোনও মান মান স্ট্রিং বৈশিষ্ট্যে উপস্থিত থাকে তবে এটি মিথ্যা প্রত্যাবর্তন করবে
আমি এমন পরিস্থিতির মুখোমুখি হয়েছি যেখানে আমাকে অবশ্যই পরীক্ষা করতে হবে যে "নাল" (স্ট্রিং হিসাবে) অবশ্যই শূন্য হিসাবে গণ্য হবে। এছাড়াও সাদা স্থান এবং একটি বাস্তব নাল অবশ্যই সত্য ফিরে আসতে হবে। আমি অবশেষে নিম্নলিখিত ফাংশন স্থির করেছি ...
public boolean isEmpty(String testString) {
return ((null==testString) || "".equals((""+testString).trim()) || "null".equals((""+testString).toLowerCase()));
}
আপনি যদি আপনার পদ্ধতির পরামিতিগুলি যাচাই করতে চান তবে আপনি অনুসরণ করতে পারেন সহজ পদ্ধতি
public class StringUtils {
static boolean anyEmptyString(String ... strings) {
return Stream.of(strings).anyMatch(s -> s == null || s.isEmpty());
}
}
উদাহরণ:
public String concatenate(String firstName, String lastName) {
if(StringUtils.anyBlankString(firstName, lastName)) {
throw new IllegalArgumentException("Empty field found");
}
return firstName + " " + lastName;
}
PreparedStatement
এবং স্ট্রিং কনটেনটেশন আদিম দ্বারা একটি এসকিউএল কোয়েরি তৈরির পরিবর্তে। ইনজেকশন দুর্বলতা সব ধরনের এড়াতে আরো অনেক কিছু পাঠযোগ্য, ইত্যাদি