কেস উপেক্ষা করে `string.startsWith ()` পদ্ধতিটি কীভাবে ব্যবহার করবেন?


115

আমি string.startsWith()পদ্ধতিটি ব্যবহার করতে চাই তবে মামলাটি উপেক্ষা করছি।

মনে করুন আমার String"সেশন" আছে এবং আমি startsWith"এসইএসসি" ব্যবহার করি তবে এটি ফিরে আসবে true

আমি কীভাবে এটি অর্জন করতে পারি?


5
এই প্রশ্নটি বন্ধ করার কোনও কারণ ছিল না। যাইহোক, সর্বোত্তম সমাধানটি হ'ল ব্যবহার করা string.regionMatches(true, 0, prefix, 0, prefix.length());যা উভয় স্ট্রিং "স্বাভাবিককরণ" ব্যয় করে না।
ইসাপির

অ্যালেক্সান্ডারআবাকুমভ আমার দ্বারা ভাল সঠিক উত্তর আমার মন্তব্য উপর পোস্ট করা হয়। এটি স্ট্রিংয়ের ক্ষেত্রে পরিবর্তন করার চেয়ে অনেক বেশি দক্ষ। মন্তব্য করার চেয়ে উত্তরে এটি উত্তম করা ভাল।
isapir

উত্তর:


98

আপনার স্ট্রিংটি পরীক্ষা করার আগে ব্যবহার করুন toUpperCase()বা toLowerCase()মানক করুন।


8
এখানে বড় সমস্যা হল পারফরম্যান্স। ছোট স্ট্রিংগুলির জন্য কোনও সমস্যা নেই, তবে আপনার যদি বড় একটি থাকে ... আমি বলতে চাই ... আপনি কি আসলেই 1 এমবি স্ট্রিংয়ে একটি টুঅপারকেসটি কেবল 4-10 ইনসিয়াল অক্ষরগুলির সাথে তুলনা করতে করবেন?
ডায়র্জিও

4
হুম এমনকি আমি যদি দেখতে পেলাম না কেন আমি 1 মিমি স্ট্রিংয়ের প্রারম্ভিক অংশটি তুলনা করতে চাই তবে কেবল যদি 4 - 10 প্রাথমিক অক্ষর আমাকে আগ্রহ দেয় তবে আমি সাবস্ট্রিং ব্যবহার করি এবং তারপরে স্বাভাবিক এবং সম্পন্ন করি ...
নিমেসিস

3
এই উত্তর (এবং এখানে পাওয়া সমস্ত অন্যান্য উত্তর) ভুল। আপনি যদি বাস্তবায়নের দিকে লক্ষ্য করেন তবে String.equalsIgnoreCase()আবিষ্কার করবেন যে আপনি সিদ্ধান্তে ফিরতে পারার আগে আপনার স্ট্রিংয়ের ছোট এবং বড় হাতের উভয় সংস্করণ তুলনা করতে হবে false। বিকল্প উত্তরের জন্য stackoverflow.com/a/38947571/14731 দেখুন ।
গিলি

10
এই উত্তরটি সত্য নয় কারণ টুলওয়ারকেস () স্থানীয়ভাবে অক্ষর পরিবর্তনের জন্য স্থানীয়ভাবে প্রয়োগ করে get ডেফল্ট () ব্যবহার করে এবং এটি মিথ্যা নেতিবাচক দিকে পরিচালিত করতে পারে। ধরা যাক আপনি "ইস্তানবুল" "" ইস্তানবুল "এর সাথে তুলনা করতে চান তুর্কি "İ" এর লোয়ার কেস সমতুল্য "ı"। সুতরাং যখন আমি এটি করার চেষ্টা করব "İstanbul".toLowerCase().startsWith("istanbul".toLowerCase())(একটি লোকাল kish টার্কিশ পরিবেশে), এটি আমাকে মিথ্যা দেবে।
মোস্তফা বার্কে মুতলু

1
@ নেমেসিস, এই উত্তরটি ভুল, গ্রহণযোগ্য উত্তর হওয়ায় এটি অনেক লোকের জন্য বিভ্রান্তিকর হতে পারে। আপনি দয়া করে আপনার উত্তরটি সম্পাদনা করতে এবং রোহিত জৈন উত্তরের লিঙ্ক করতে পারেন?
মোহা সর্বশক্তিমান উট

88

একটি বিকল্প হ'ল উভয়কেই ছোট হাতের বা বড় হাতের মধ্যে রূপান্তর করা:

"Session".toLowerCase().startsWith("sEsSi".toLowerCase());

এটা ভুল. দেখুন: https://stackoverflow.com/a/15518878/14731


অন্য বিকল্পটি হল String#regionMatches()পদ্ধতিটি ব্যবহার করা , যা কেস-সংবেদনশীল মিল করতে হবে কিনা তা উল্লেখ করে একটি বুলিয়ান যুক্তি গ্রহণ করে। আপনি এটি এর মতো ব্যবহার করতে পারেন:

String haystack = "Session";
String needle = "sEsSi";
System.out.println(haystack.regionMatches(true, 0, needle, 0, 5));  // true

সেটি পরীক্ষা করে এর অঞ্চল কিনা needleসূচি থেকে 0পর্যন্ত দৈর্ঘ্য 5উপস্থিত haystackসূচক থেকে শুরু 0দৈর্ঘ্য পর্যন্ত 5বা না। প্রথম যুক্তিটি হ'ল এর trueঅর্থ কেস-সংবেদনশীল মিল থাকবে।


এবং যদি আপনি কেবল রেজেক্সের খুব বড় অনুরাগী হন তবে আপনি এই জাতীয় কিছু করতে পারেন:

System.out.println(haystack.matches("(?i)" + Pattern.quote(needle) + ".*"));

(?i) এম্বেড করা পতাকা কেস মিলাকে উপেক্ষা করার জন্য।


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

@ রোহিত জৈন, আসলে এটি: System.out.println("Session".toLowerCase().startsWith("sEsSi".toLowerCase()));কোনও প্রপার সমাধান নয়। আপনি এটি চেষ্টা করে দেখতে পারেন: System.out.println("SessIon".toLowerCase().startsWith("sEsSi".toLowerCase()));ভিএম যুক্তি দিয়ে -Duser.country=TR -Duser.language=tr এই উদাহরণে Iবড় হাতের অক্ষর রয়েছেi
DPM



1

আমি জানি যে আমি দেরি করে ফেলেছি, তবে অ্যাপাচি কমন্স ল্যাং 3 এর স্ট্রিংইটিলস.স্টার্টস উইথআইগনোর কেস () ব্যবহার সম্পর্কে কী?

উদাহরণ:

StringUtils.startsWithIgnoreCase(string, "start");

কেবলমাত্র আপনার pom.xML ফাইলটিতে নিম্নলিখিত নির্ভরতা যুক্ত করুন (আপনি মাভেন ব্যবহার করেন এমন অনুমানটি গ্রহণ করছেন):

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.11</version>
</dependency>


-1

আপনি সর্বদা করতে পারেন

"Session".toLowerCase().startsWith("sEsSi".toLowerCase());

-1

ব্যবহার এক সাথে শুরু এবং toLoverCase দিয়ে শুরু হয়

এটার মত

"Session".toLowerCase().startsWith("sEsSi".toLowerCase());
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.