আমি কীভাবে পরীক্ষা করব যে একটি জাভা স্ট্রিং সমস্ত সাদা স্থান নয়?


132

আমি পরীক্ষা করতে চাই যে জাভা স্ট্রিং বা চরিত্রের অ্যারেটি কেবল হোয়াইটস্পেস দিয়ে তৈরি করা হয়নি, জাভা ব্যবহার করে?

এটি জাভাস্ক্রিপ্ট ব্যতীত এটি একটি খুব অনুরূপ প্রশ্ন:
স্ট্রিংয়ের অক্ষর এবং শ্বেতস্পেস রয়েছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি, কেবল সাদা জায়গা নয়?

সম্পাদনা : আমি বর্ণমালার অক্ষরগুলি সম্পর্কে কিছুটা সরিয়েছি, সুতরাং এটি আরও অর্থবোধ করে।


3
হোয়াইটস্পেসের অনেকগুলি পৃথক সংজ্ঞা রয়েছে সে সম্পর্কে সচেতন থাকুন: স্প্রেডশিটস. google.com/pub?key=pd8dAQyHbdewRsnE5x5GzKQ আপনি কোনটি চান? অথবা তারপরে আপনি বলেন "একটি বর্ণমালার চরিত্র আছে", যা সম্পূর্ণ আলাদা জিনিস। পরিষ্কার করে বলো.
কেভিন বোউরিলিয়ন

বিভ্রান্তির জন্য ক্ষমা ... সমস্ত শ্বেত স্পেসই মূল নয়- মূলত যদি এর মধ্যে সমস্ত সাদা অংশ থাকে তবে আমি এটিকে বাদ দিতে চাই, কারণ এতে কোনও সামগ্রী নেই।
অঙ্কুর

1
জেডিকে / ১১ এর সাহায্যে আপনি এপিআই ব্যবহার করতে পারেনString.isBlank
নামান

উত্তর:


224

সবচেয়ে সংক্ষিপ্ত সমাধান যা আমি ভাবতে পারি:

if (string.trim().length() > 0) ...

এটি কেবল (অ) সাদা স্থানের জন্য পরীক্ষা করে। আপনি যদি বিশেষ চরিত্রের ক্লাসগুলির জন্য পরীক্ষা করতে চান তবে আপনাকে match()একটি রেইগ এক্সএক্স সহ শক্তিশালী ব্যবহার করতে হবে যেমন:

if (string.matches(".*\\w.*")) ...

... যা কমপক্ষে একটি (ASCII) অক্ষর অক্ষরের জন্য যাচাই করে।


9
এফডাব্লুআইডাব্লু: আমি আশা করব প্রথম সমাধানটি দ্রুততর হবে।
স্টিফেন সি

2
@ স্টেফেন সি: একেবারে! কিন্তু @Uri নির্দিষ্ট, আমি প্রশ্নই অস্পষ্টতা দুটি বিভিন্ন সমস্যা ধন্যবাদ সমাধানের হচ্ছে :) এছাড়াও, আমি খুব কমই ব্যবহার matches(): অভিনয়ের জন্য, আমি সাধারণত সংরক্ষণ Patternএকটি final static। যদি একই কোডটি ঘন ঘন চলতে থাকে তবে অর্থ প্রদান করে।
কার্ল স্মট্রিক্জ

3
@ আন্দ্রেস_ডি: হেই, আমি আমার আদেশ পেয়েছি! ওপি জানিয়েছে যে সে কোনও স্ট্রিং বা চর অ্যারে চেক করতে চেয়েছিল, তিনি কখনও নাল সম্পর্কে কিছুই বলেননি! :) * চুক্তিতে সূক্ষ্ম মুদ্রণ পরীক্ষা করে * " nullস্ট্রিং নয়!"
কার্ল স্মট্রিকz

1
এছাড়াও, "\\ ডাব্লু" সমস্ত অ-শ্বেতস্পেসের তুলনায় কেবল অ-শ্বেতস্পেসের অক্ষরের সীমিত উপসর্গের সাথে মেলে কারণ এটি জেড, এজে, 0-9 এবং আন্ডারস্কোর হিসাবে সংজ্ঞায়িত "শব্দের অক্ষর" বোঝায়।
রব রাইচ

2
। আমি your_string.trim () isEmpty () ব্যবহার করা হয় এবং আমার জন্য কাজ করেছেন
নেরি

59

আমি অ্যাপাচি কমন্স ল্যাং গ্রন্থাগারটি ব্যবহার করব। এটিতে স্ট্রিংগিলস নামে একটি শ্রেণি রয়েছে যা স্ট্রিং অপারেশনের জন্য কার্যকর। কোনও স্ট্রিং সমস্ত সাদা জায়গা নয় কিনা তা যাচাই করার জন্য আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:

StringUtils.isBlank(<your string>)

রেফারেন্সটি এখানে: স্ট্রিংইটিলস.আইসব্ল্যাঙ্ক


8
আমি নির্বাচিত উত্তর ব্যবহারের তুলনায় এই সমাধানটি পছন্দ করি। এটি স্ট্রিংয়ের জন্যও পরীক্ষা করবে == নাল
রিচার্ড

এটি এখন ভুল। StringUtils.isEmptyআপনি "" পাস করলে এখন মিথ্যা ফেরত আসবে।
জেমস স্পেন্স

53

কার্ল স্মোট্রিক্জের দ্বারা উল্লিখিত তুলনায় কিছুটা কম:

!string.trim().isEmpty();

10
আপনি যুবত হুইপার্সনার্স এবং জাভা-১.6-পরবর্তী কৌশলগুলি আপনার নতুন! গুরুতরভাবে, আমার সংস্থার কমপক্ষে একটি প্রকল্প এখনও জাভা 1.4 (দীর্ঘশ্বাস) এ চলে।
কার্ল স্মট্রিক্জ

অপেক্ষাকৃত ছোট? হ্যাঁ. ব্যক্তিগতভাবে, আমি আরও ভার্বোজ কোডিং শৈলী পছন্দ করি
মিশেল


9

আপনি যদি জাভা 11 ব্যবহার করছেন তবে নতুন isBlankস্ট্রিং পদ্ধতিটি কাজে আসবে:

!s.isBlank();

আপনি যদি জাভা 8, 9 বা 10 ব্যবহার করে থাকেন তবে স্ট্রিং কেবল সাদা জায়গা নয় তা পরীক্ষা করতে আপনি একটি সহজ স্ট্রিম তৈরি করতে পারেন:

!s.chars().allMatch(Character::isWhitespace));

অ্যাপাচি কমন্স ল্যাংয়ের মতো কোনও তৃতীয় পক্ষের লাইব্রেরি না করার পাশাপাশি, এই সমাধানগুলিতে কোনও সাদা স্থানের অক্ষর পরিচালনা করার সুবিধা রয়েছে, এবং অন্যান্য অনেক উত্তরে প্রস্তাবিত ' 'একটি trimভিত্তিক সমাধান হিসাবে কেবল সরল স্পেস নয় । সমস্ত সমর্থিত সাদা স্থানের ধরণের বিশদ তালিকার জন্য আপনি জাভাডোকগুলি উল্লেখ করতে পারেন । নোট করুন যে খালি স্ট্রিংগুলি উভয় ক্ষেত্রেই আচ্ছাদিত।


5
if(target.matches("\\S")) 
    // then string contains at least one non-whitespace character

ব্যাক-স্ল্যাশ ক্যাপ-এস এর নোট ব্যবহার, যার অর্থ "নন-হোয়াইটস্পেস চর"

আমি বাজি ধরতাম এটিই সবচেয়ে সহজ (এবং সম্ভবত সবচেয়ে দ্রুত?) সমাধান।


2
চেষ্টা করুন: String year="1995"; year.matches("\\S"); will return falseসুতরাং এটি সঠিক সমাধান নয়। : |
নাহাট দিনহ

6
নাহাত, আপনি সঠিক আছেন যদিও আমি ব্যাখ্যা করার জন্য ক্ষতির মধ্যে রয়েছি। জাভা ডক্স অনুসারে, স্ট্রিং.ম্যাচগুলি একটি প্রদত্ত স্ট্রিং একটি রেজেক্সের সাথে মেলে কিনা তা পরীক্ষা করে দেখুন। সামান্য পরীক্ষা-নিরীক্ষা দেখায় যে এটি পুরোপুরি নির্ভুল নয়, কারণ প্রদত্ত রেজেক্সটি পুরো স্ট্রিংয়ের সাথে মেলে তবে এই ফাংশনটি কেবলমাত্র মিলছে! সুতরাং, উপরের রেজেক্সকে ("\\ এস") পরিবর্তন করে "^। * \\ এস। * To" হিসাবে প্রত্যাশিতভাবে কাজ করবে যদিও এই আচরণটি সঠিকভাবে নথিভুক্ত নয় এবং স্ট্রিং ম্যাচের প্রতিটি বাস্তবায়ন থেকে যথেষ্ট পরিমাণে বিভক্ত বলে মনে হচ্ছে appears নিয়মিত এক্সপ্রেশন ব্যবহার করে।
রব রাইচ 26'15

4

এই উত্তরটি সিডেনোটের উপর আরও বেশি কেন্দ্রীভূত করে " অর্থাত্ কমপক্ষে একটি বর্ণানুক্রমিক অক্ষর রয়েছে "। কেবল তাই নয়, এটা অনেক অন্যান্য (বা তার আগে) সমাধান করতে খুব যোগ না ছাড়া এটা কেস স্ট্রিং হয় NPE সঙ্গে আপনি আঘাত না null

আমরা চাই false(1) গুলি যদি null(2) গুলি খালি থাকে বা (3) এর মধ্যে কেবল শ্বেতচিহ্ন থাকে।

public static boolean containsNonWhitespaceChar(String s) {
  return !((s == null) || "".equals(s.trim()));
}

4

আপনি যদি কেবল হোয়াইটস্পেসের জন্য যাচাই করে থাকেন এবং নাল সম্পর্কে কিছু চিন্তা করেন না তবে আপনি org.apache.commons.lang.StringUtils.isWhitespace (স্ট্রিং স্ট্রিং) ব্যবহার করতে পারেন,

StringUtils.isWhitespace(String str);

(স্ট্রিংয়ে কেবল সাদা স্থান রয়েছে কিনা তা পরীক্ষা করে)

আপনি যদি নাল (হোয়াইটস্পেস সহ) অনুসন্ধান করতে চান তবে

StringUtils.isBlank(String str);

isBlank (স্ট্রিং) বাঞ্ছনীয় কারণ এটি নাল বৈধতাও পরিচালনা করে!
সচিদানন্দ নায়েক

2

জাভা -11 + দিয়ে আপনি String.isBlankপ্রদত্ত স্ট্রিংটি পুরো সাদা অংশের তৈরি নয় কিনা তা যাচাই করতে আপনি API টি ব্যবহার করতে পারেন -

String str1 = "    ";
System.out.println(str1.isBlank()); // made up of all whitespaces, prints true

String str2 = "    a";
System.out.println(str2.isBlank()); // prints false

একই জন্য জাভাডোক হ'ল:

/**
 * Returns {@code true} if the string is empty or contains only
 * {@link Character#isWhitespace(int) white space} codepoints,
 * otherwise {@code false}.
 *
 * @return {@code true} if the string is empty or contains only
 *         {@link Character#isWhitespace(int) white space} codepoints,
 *         otherwise {@code false}
 *
 * @since 11
 */
public boolean isBlank()

1

ট্রিম পদ্ধতিটি আপনার জন্য দুর্দান্ত কাজ করা উচিত।

http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/api/java/lang/String.html#trim ()

নেতৃস্থানীয় এবং অনুসরণযোগ্য শ্বেত স্পেস বাদ দিয়ে স্ট্রিংয়ের একটি অনুলিপি ফেরত দেয়। যদি এই স্ট্রিং অবজেক্টটি একটি খালি অক্ষর অনুক্রমকে প্রতিনিধিত্ব করে, বা এই স্ট্রিং অবজেক্ট দ্বারা প্রতিনিধিত্ব করা অক্ষর ক্রমের প্রথম এবং শেষ অক্ষরের উভয়টিরই '\ u0020' (স্পেস অক্ষর) এর চেয়ে বড় কোড থাকে তবে এই স্ট্রিং অবজেক্টের একটি রেফারেন্স ফিরে আসে।

অন্যথায়, যদি স্ট্রিংয়ে '\ u0020' এর চেয়ে বড় কোডের কোনও অক্ষর না থাকে, তবে একটি নতুন স্ট্রিং অবজেক্ট খালি স্ট্রিং প্রতিনিধিত্ব করে তৈরি করা হবে।

অন্যথায়, কে এর স্ট্রিংয়ের প্রথম অক্ষরের সূচক হয়ে উঠুক যার কোডটি '00 u0020' এর চেয়ে বড়, এবং এমটি স্ট্রিংয়ের শেষ অক্ষরের সূচক হোক যার কোডটি '\ u0020' এর চেয়ে বড়। একটি নতুন স্ট্রিং অবজেক্ট তৈরি করা হয়েছে, যা এই স্ট্রিংয়ের সাবস্ট্রিংকে উপস্থাপন করে যা সূচক কেতে অক্ষরের সাথে শুরু হয় এবং সূচক এম-এ অক্ষরের সাথে শেষ হয়, যা এই.এসবস্ট্রিং (কে, মি + 1) এর ফলাফল।

এই পদ্ধতিটি স্ট্রিংয়ের শুরু এবং শেষ থেকে হোয়াইটস্পেস ছাঁটাই করতে ব্যবহার করা যেতে পারে; বাস্তবে, এটি সমস্ত ASCII নিয়ন্ত্রণ অক্ষরগুলিকেও ছাঁটাই করে।

রিটার্নস: শীর্ষস্থানীয় এবং অনুসরণযোগ্য শ্বেত স্থানটি সহ এই স্ট্রিংয়ের একটি অনুলিপি, বা যদি এই স্ট্রিংটির কোনও শৈলীর স্থান নেই leading

আপনি ছাঁটতে পারেন এবং তারপরে একটি খালি স্ট্রিংয়ের সাথে তুলনা করতে বা সম্ভবত দৈর্ঘ্যের জন্য 0 পরীক্ষা করতে পারেন।


উত্তরের লিঙ্কটি মারা গেছে - 404 | আমরা দুঃখিত, পৃষ্ঠাটি বিদ্যমান নেই বা আর উপলব্ধ নেই
পাং

0

বিকল্প:

boolean isWhiteSpaces( String s ) {
    return s != null && s.matches("\\s+");
 }

1
* গুলি * সাদা স্টেসিসের সাথে বা ছাড়াই সমস্ত স্ট্রিংয়ের সাথে মিলবে। সম্ভবত আপনি মানে \\ গুলি +?
রব রাইচ

0

ছাঁটা () এবং অন্যান্য উল্লিখিত নিয়মিত অভিব্যক্তি সমস্ত ধরণের সাদা জায়গার জন্য কাজ করে না

অর্থাত্: ইউনিকোড চরিত্র 'লাইন SEPARATOR' http://www.fileformat.info/info/unicode/char/2028/index.htm

জাভা ফাংশন ক্যারেক্টার.আইসওয়াইটস স্পেস () সমস্ত পরিস্থিতি কভার করে।

এজন্য ইতিমধ্যে উল্লিখিত সমাধান স্ট্রিংগিলস.আইসওয়াইটস স্পেস (স্ট্রিং) / বা স্ট্রিং ইউটিলস.আইস ব্ল্যাঙ্ক (স্ট্রিং) ব্যবহার করা উচিত।


0
StringUtils.isEmptyOrWhitespaceOnly(<your string>)

পরীক্ষা করবে: - এটি কি নাল - এটি কেবল স্থান - এটি খালি স্ট্রিং ""

https://www.programcreek.com/java-api-examples/?class=com.mysql.jdbc.StringUtils&method=isEmptyOrWhitespaceOnly


1
এটি কি কোনও গ্রন্থাগার থেকে? প্রকল্পের লিঙ্ক। নাকি জাভায় নির্মিত? প্যাকেজটি ইঙ্গিত করুন।
তুলসী বার্ক

@ বাসিলবার্ক আমার মনে হয় এটি com.mysql.jdbc.StringUtils.isEmptyOrWhitespaceOnly
ahmet_y

0

ওপেনজেডক 13, উইন্ডোজ 10 এ কেবল একটি পারফরম্যান্সের তুলনা thee

"abcd"
"    "
" \r\n\t"
" ab "
" \n\n\r\t   \n\r\t\t\t   \r\n\r\n\r\t \t\t\t\r\n\n"
"lorem ipsum dolor sit amet  consectetur adipisici elit"
"1234657891234567891324569871234567891326987132654798"

নিম্নলিখিত পরীক্ষার একটি কার্যকর করা:

// trim + empty
input.trim().isEmpty()

// simple match
input.matches("\\S")

// match with precompiled pattern
final Pattern PATTERN = Pattern.compile("\\S");
PATTERN.matcher(input).matches()

// java 11's isBlank
input.isBlank()

প্রতি 10.000.000 বার।

ফলাফলগুলো:

METHOD    min   max   note
trim:      18   313   much slower if text not trimmed
match:   1799  2010   
pattern:  571   662   
isBlank:   60   338   faster the earlier hits the first non-whitespace character

বেশ আশ্চর্যজনকভাবে ট্রিম + খালি দ্রুততম। এমনকি যদি এটি ছাঁটাই করা পাঠ্যটি নির্মাণ করা প্রয়োজন। এখনও দ্রুততর তবে সরল-লুপের জন্য একটি একক অ-হোয়াইটস্পিডযুক্ত চরিত্রের সন্ধান করা ...

সম্পাদনা: দীর্ঘ পাঠ্য, আরও সংখ্যা পৃথক। দীর্ঘ পাঠ্যের ট্রিমটি কেবল সহজ লুপের চেয়ে বেশি সময় নেয়। যাইহোক, রেজেক্সগুলি এখনও সবচেয়ে ধীর সমাধান।


0

যদিও ব্যক্তিগতভাবে আমি অগ্রাধিকার দেব !str.isBlank(), যেমন অন্যরা ইতিমধ্যে পরামর্শ দিয়েছে (বা str -> !str.isBlank()ভবিষ্যদ্বাণী হিসাবে), str.trim()উপরে উল্লিখিত পদ্ধতির আরও আধুনিক এবং দক্ষ সংস্করণটি ব্যবহার করা হবে str.strip()- নালাগুলিকে "হোয়াইটস্পেস" হিসাবে বিবেচনা করুন :

if (str != null && str.strip().length() > 0) {...}

প্রেডিকেট হিসাবে উদাহরণস্বরূপ, স্ট্রিমগুলির সাথে ব্যবহারের জন্য, যেমন ইউনিট পরীক্ষায়:

@Test
public void anyNonEmptyStrippedTest() {
    String[] strings = null;
    Predicate<String> isNonEmptyStripped = str -> str != null && str.strip().length() > 0;
    assertTrue(Optional.ofNullable(strings).map(arr -> Stream.of(arr).noneMatch(isNonEmptyStripped)).orElse(true));
    strings = new String[] { null, "", " ", "\\n", "\\t", "\\r" };
    assertTrue(Optional.ofNullable(strings).map(arr -> Stream.of(arr).anyMatch(isNonEmptyStripped)).orElse(true));
    strings = new String[] { null, "", " ", "\\n", "\\t", "\\r", "test" };
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.