কোনও স্ট্রিং বেশ কয়েকটি উপসর্গের সাথে শুরু হয় কিনা তা কীভাবে পরীক্ষা করবেন?


101

আমার কাছে যদি বিবৃতিটি নিম্নলিখিত থাকে:

String newStr4 = strr.split("2012")[0];
if (newStr4.startsWith("Mon")) {
    str4.add(newStr4);
}

আমি এটি startsWith Mon Tues Weds Thurs Fridayইত্যাদি অন্তর্ভুক্ত করতে চাই স্ট্রিং ব্যবহার করার সময় কি এর কোনও সহজ উপায় আছে? আমি চেষ্টা করেছি ||কিন্তু কাজ হয়নি।


4
মানে আপনি চেষ্টা করেছেন "Mon||Tues"ইত্যাদি? নাকি আপনি ব্যবহার করেছেন newStr4.startsWith("Mon")||newStr4.startsWith("Tues") ...? যেভাবেই হোক, দয়া করে "এটি কাজ করে না" সংজ্ঞা দিন।
টমাস

আপনি কি কোনও সুযোগে একটি তারিখ বিশ্লেষণ করার চেষ্টা করছেন ?? যদি তাই সরলডেটফরমেট ব্যবহার করুন ...
অ্যাডাম

উত্তর:


178

আপনি কি এটি বোঝাতে চান:

if (newStr4.startsWith("Mon") || newStr4.startsWith("Tues") || ...)

অথবা আপনি নিয়মিত প্রকাশ করতে পারেন:

if (newStr4.matches("(Mon|Tues|Wed|Thurs|Fri).*"))

4
আপনার প্রস্তাবিত দুটি পদ্ধতিতে কি পারফরম্যান্সের পার্থক্য রয়েছে?
TheCrazyProgrammer

6
@ দ্য ক্র্যাজিপ্রগ্রামার অবশ্যই আছে; নিয়মিত এক্সপ্রেশনগুলির মাধ্যমে মিলটি কাঁচা স্ট্রিং পদ্ধতি কলগুলির চেয়ে অনেক বেশি ব্যয়বহুল। সঠিক পরিসংখ্যান আমি দিতে পারি না, তবে এটি সাধারণ sensকমত্য।
klaar

51

ইতিমধ্যে উপস্থাপিত সমাধানগুলি ছাড়াও, আপনি অ্যাপাচি কমন্স ল্যাং গ্রন্থাগারটি ব্যবহার করতে পারেন:

if(StringUtils.startsWithAny(newStr4, new String[] {"Mon","Tues",...})) {
  //whatever
}

আপডেট: কিছু সময়ে varargs প্রবর্তন কল এখন সহজতর করে তোলে:

StringUtils.startsWithAny(newStr4, "Mon", "Tues",...)

33

Streamএখনও অবধি কেউ উল্লেখ করেনি , তাই এটি এখানে:

if (Stream.of("Mon", "Tues", "Wed", "Thurs", "Fri").anyMatch(s -> newStr4.startsWith(s)))

6
দুর্দান্ত (এবং আপ টু ডেট) উত্তর ... বিটিডব্লিউ আরও পরিষ্কার s -> newStr4.startsWith(s)করে প্রতিস্থাপন করা newStr7::startsWithযেতে পারে
জর্ডি

আমি কীভাবে এখানে উপেক্ষা করতে পারি?
হ্যাপিবুদ্ধ

আপনি স্ট্রিং টুলওয়ারকেস () ফাংশনটি ব্যবহার করতে পারেন।
ইলিয়া কোপিসোভ

7

একটি সহজ সমাধান হ'ল:

if (newStr4.startsWith("Mon") || newStr4.startsWith("Tue") || newStr4.startsWith("Wed"))
// ... you get the idea ...

একটি ফ্যানসিয়ার সমাধানটি হ'ল:

List<String> days = Arrays.asList("SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT");
String day = newStr4.substring(0, 3).toUpperCase();
if (days.contains(day)) {
    // ...
}

4
অথবা অ্যারে.বাইনারি অনুসন্ধান () যদি তারা অনুসন্ধানের তালিকাটি সাজানো থাকে: ডি
ব্রেন্ডন লং

4
@ ব্রেন্ডনলং এই জাতীয় একটি সংক্ষিপ্ত তালিকার জন্য ওভারকিলের কিছুটা হলেও, ঠিক আছে :)
এস্পার লোপেজ

3

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

Set<String> dayNames = Calendar.getInstance()
 .getDisplayNames(Calendar.DAY_OF_WEEK,
      Calendar.SHORT,
      Locale.getDefault())
 .keySet();

সেখান থেকে আপনি। স্টার্টস বা। ম্যাচগুলি বা অন্যরা উপরে উল্লিখিত অন্য যে কোনও পদ্ধতি ব্যবহার করতে পারেন। এইভাবে আপনি jvm এর জন্য ডিফল্ট লোকেল পাবেন। আরও শক্তিশালী হওয়ার জন্য আপনি সর্বদা লোকালে (এবং সম্ভবত এটি সিস্টেম লোকালে এটি ডিফল্ট হয়ে যেতে পারে) যেতে পারত।


1
if(newStr4.startsWith("Mon") || newStr4.startsWith("Tues") || newStr4.startsWith("Weds") .. etc)

আপনাকে str.startsWith(otherStr)প্রতিটি আইটেমের জন্য পুরোটি অন্তর্ভুক্ত করতে হবে , যেহেতু ||শুধুমাত্র বুলিয়ান এক্সপ্রেশন (সত্য বা মিথ্যা) দিয়ে কাজ করে।

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

দিনের নামের সংক্ষেপগুলি সনাক্ত করার জন্য একটি নিয়মিত অভিব্যক্তি হ'ল:

if(Pattern.matches("Mon|Tues|Wed|Thurs|Fri", stringToCheck)) {

0

আপনি যখন বলেন যে আপনি ওআর ব্যবহারের চেষ্টা করেছেন, আপনি ঠিক কীভাবে চেষ্টা করেছিলেন এবং ব্যবহার করেছিলেন? আপনার ক্ষেত্রে, আপনার যা করা দরকার তা হ'ল এটির মতো:

String newStr4 = strr.split("2012")[0];
if(newStr4.startsWith("Mon") || newStr4.startsWith("Tues")...)
str4.add(newStr4);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.