কোনও অ্যারে থেকে স্ট্রিংগুলির কোনও রয়েছে কিনা তা দেখার জন্য আমি কীভাবে স্ট্রিংটি পরীক্ষা করব?
পরিবর্তে ব্যবহার
if (string.contains(item1) || string.contains(item2) || string.contains(item3))
কোনও অ্যারে থেকে স্ট্রিংগুলির কোনও রয়েছে কিনা তা দেখার জন্য আমি কীভাবে স্ট্রিংটি পরীক্ষা করব?
পরিবর্তে ব্যবহার
if (string.contains(item1) || string.contains(item2) || string.contains(item3))
উত্তর:
সম্পাদনা: জাভা 8 স্ট্রিমিং এপিআই ব্যবহার করে এখানে একটি আপডেট দেওয়া হচ্ছে। এত ক্লিনার। এখনও নিয়মিত প্রকাশের সাথে মিলিত হতে পারে।
public static boolean stringContainsItemFromList(String inputStr, String[] items) {
return Arrays.stream(items).parallel().anyMatch(inputStr::contains);
}
এছাড়াও, আমরা যদি ব্যবহার করতে পারি এমন অ্যারের পরিবর্তে যদি ইনপুট প্রকারটিকে একটি তালিকায় পরিবর্তন করি items.parallelStream().anyMatch(inputStr::contains)
।
আপনি .filter(inputStr::contains).findAny()
যদি ম্যাচিংয়ের স্ট্রিংটি ফিরে আসতে চান তবে আপনিও ব্যবহার করতে পারেন।
মূল সামান্য তারিখের উত্তর:
এখানে একটি (ভেরি বেসিক) স্থির পদ্ধতি রয়েছে। মনে রাখবেন যে তুলনা স্ট্রিংয়ের ক্ষেত্রে এটি সংবেদনশীল। এটিকে সংবেদনশীল হওয়ার একটি প্রাথমিক উপায় হ'ল কল করা toLowerCase()
বা toUpperCase()
ইনপুট এবং পরীক্ষার উভয় স্ট্রিং।
আপনার যদি এর থেকে আরও জটিল কিছু করার দরকার হয় তবে আমি প্যাটার্ন এবং ম্যাচারের ক্লাসগুলি দেখার এবং কিছু নিয়মিত এক্সপ্রেশন কীভাবে করতে হয় তা শেখার পরামর্শ দেব । একবার আপনি সেগুলি বুঝতে পারলে আপনি সেগুলি ক্লাস বা সহায়তা String.matches()
পদ্ধতি ব্যবহার করতে পারেন ।
public static boolean stringContainsItemFromList(String inputStr, String[] items)
{
for(int i =0; i < items.length; i++)
{
if(inputStr.contains(items[i]))
{
return true;
}
}
return false;
}
import org.apache.commons.lang.StringUtils;
ব্যবহার করুন:
StringUtils.indexOfAny(inputString, new String[]{item1, item2, item3})
এটি খুঁজে পাওয়া স্ট্রিংয়ের সূচি বা -1 না পাওয়া গেলে ফিরিয়ে দেবে।
আপনি স্ট্রিং # ম্যাচের পদ্ধতিটি এভাবে ব্যবহার করতে পারেন :
System.out.printf("Matches - [%s]%n", string.matches("^.*?(item1|item2|item3).*$"));
সবচেয়ে সহজ উপায় সম্ভবত অ্যারেটিকে java.util.ArrayList রূপান্তর করা। এটি একবার অ্যারেলিস্টে আসার পরে আপনি সহজেই অন্তর্ভুক্ত পদ্ধতিটি উপার্জন করতে পারেন।
public static boolean bagOfWords(String str)
{
String[] words = {"word1", "word2", "word3", "word4", "word5"};
return (Arrays.asList(words).contains(str));
}
string
কোনো রয়েছে String
অ্যারের মধ্যে গুলি, যদি থাকে না String
অ্যারের মধ্যে গুলি ধারণ string
।
.equals()
তাদের পোস্টে ব্যবহার করছে, যা অত্যন্ত বিভ্রান্তিকর। আমি মনে করি তাদের প্রশ্নটি সম্পাদনা করতে হবে
আপনি যদি জাভা 8 বা তার বেশি ব্যবহার করেন তবে আপনি এই জাতীয় কাজ করতে স্ট্রিম এপিআই- তে নির্ভর করতে পারেন :
public static boolean containsItemFromArray(String inputString, String[] items) {
// Convert the array of String items as a Stream
// For each element of the Stream call inputString.contains(element)
// If you have any match returns true, false otherwise
return Arrays.stream(items).anyMatch(inputString::contains);
}
ধরে নিলাম যে আপনার String
কাছে পরীক্ষা করার জন্য বড় একটি বড় অ্যারে রয়েছে আপনি কল করেও সমান্তরালে অনুসন্ধানটি চালু করতে পারেন parallel()
, কোডটি তখন হবে:
return Arrays.stream(items).parallel().anyMatch(inputString::contains);
এখানে একটি সমাধান দেওয়া হল:
public static boolean containsAny(String str, String[] words)
{
boolean bResult=false; // will be set, if any of the words are found
//String[] words = {"word1", "word2", "word3", "word4", "word5"};
List<String> list = Arrays.asList(words);
for (String word: list ) {
boolean bFound = str.contains(word);
if (bFound) {bResult=bFound; break;}
}
return bResult;
}
সংস্করণ ৩.৪ যেহেতু অ্যাপাচি কমন ল্যাং 3 এতে রয়েছে কোনও পদ্ধতি প্রয়োগ করে ।
আরও গ্রোভয়েস্কো পদ্ধতির সাথে মেটাচ্লাসের সংমিশ্রণে ইনজেকশন ব্যবহার করা হবে :
আমি বলতে ভালোবাসি:
String myInput="This string is FORBIDDEN"
myInput.containsAny(["FORBIDDEN","NOT_ALLOWED"]) //=>true
এবং পদ্ধতিটি হ'ল:
myInput.metaClass.containsAny={List<String> notAllowedTerms->
notAllowedTerms?.inject(false,{found,term->found || delegate.contains(term)})
}
আপনার যদি ভবিষ্যতের কোনও স্ট্রিং ভেরিয়েবলের জন্য উপস্থিত থাকার জন্য কোনও দরকার থাকে তবে অবজেক্টটির পরিবর্তে ক্লাসে পদ্ধতিটি যুক্ত করুন:
String.metaClass.containsAny={notAllowedTerms->
notAllowedTerms?.inject(false,{found,term->found || delegate.contains(term)})
}
এটা চেষ্টা কর:
if (Arrays.asList(item1, item2, item3).stream().anyMatch(string::contains))
তোমার জন্য seraching হয় পুরো শব্দ আপনি এই যে কাজ করতে পারি না যদি অবশ ।
private boolean containsKeyword(String line, String[] keywords)
{
String[] inputWords = line.split(" ");
for (String inputWord : inputWords)
{
for (String keyword : keywords)
{
if (inputWord.equalsIgnoreCase(keyword))
{
return true;
}
}
}
return false;
}
আমরা এটির মতোও করতে পারি:
if (string.matches("^.*?((?i)item1|item2|item3).*$"))
(?i): used for case insensitive
.*? & .*$: used for checking whether it is present anywhere in between the string.
নীচে স্ট্রিংসটি যে অ্যারেটি আপনি সন্ধান করছেন তা ধরে নিলে আপনার পক্ষে কাজ করা উচিত :
Arrays.binarySearch(Strings,"mykeytosearch",mysearchComparator);
যেখানে মাইকিটোসার্ক হল সেই স্ট্রিং যা আপনি অ্যারের মধ্যে অস্তিত্বের জন্য পরীক্ষা করতে চান। mysearchComparator - একটি তুলনামূলক যা স্ট্রিংগুলি তুলনা করতে ব্যবহৃত হবে।
পড়ুন Arrays.binarySearch আরও তথ্যের জন্য।
if (Arrays.asList(array).contains(string))