জাভা 7 এবং জাভা 8 এর মধ্যে String.split(যা কল করে Pattern.split) এর আচরণ পরিবর্তন হয়।
নথিপত্র
ডকুমেন্টেশন মধ্যে তুলনা Pattern.splitমধ্যে জাভা 7 এবং জাভা 8 , আমরা নিম্নলিখিত দফা মান্য যোগ করা হচ্ছে:
ইনপুট ক্রমের শুরুতে যখন ইতিবাচক-প্রস্থের ম্যাচ হয় তখন ফলাফল অ্যারের শুরুতে একটি ফাঁকা শীর্ষস্থানীয় স্ট্রিং অন্তর্ভুক্ত করা হয়। শুরুতে একটি শূন্য-প্রস্থের ম্যাচ তবে কখনও এ জাতীয় শূন্যস্থানীয় স্ট্রিং তৈরি করে না।
একই ধারা এছাড়াও যোগ করা হয় String.splitএ জাভা 8 তুলনায় জাভা 7 ।
রেফারেন্স বাস্তবায়ন
আসুন Pattern.splitজাভা 7 এবং জাভা 8-তে রেফারেন্স বাস্তবায়নের কোডটি তুলনা করি The কোডটি গ্রেপকোড থেকে প্রাপ্ত হয়েছে, সংস্করণ 7u40-b43 এবং 8-b132 এর জন্য।
জাভা 7
public String[] split(CharSequence input, int limit) {
int index = 0;
boolean matchLimited = limit > 0;
ArrayList<String> matchList = new ArrayList<>();
Matcher m = matcher(input);
// Add segments before each match found
while(m.find()) {
if (!matchLimited || matchList.size() < limit - 1) {
String match = input.subSequence(index, m.start()).toString();
matchList.add(match);
index = m.end();
} else if (matchList.size() == limit - 1) { // last one
String match = input.subSequence(index,
input.length()).toString();
matchList.add(match);
index = m.end();
}
}
// If no match was found, return this
if (index == 0)
return new String[] {input.toString()};
// Add remaining segment
if (!matchLimited || matchList.size() < limit)
matchList.add(input.subSequence(index, input.length()).toString());
// Construct result
int resultSize = matchList.size();
if (limit == 0)
while (resultSize > 0 && matchList.get(resultSize-1).equals(""))
resultSize--;
String[] result = new String[resultSize];
return matchList.subList(0, resultSize).toArray(result);
}
জাভা 8
public String[] split(CharSequence input, int limit) {
int index = 0;
boolean matchLimited = limit > 0;
ArrayList<String> matchList = new ArrayList<>();
Matcher m = matcher(input);
// Add segments before each match found
while(m.find()) {
if (!matchLimited || matchList.size() < limit - 1) {
if (index == 0 && index == m.start() && m.start() == m.end()) {
// no empty leading substring included for zero-width match
// at the beginning of the input char sequence.
continue;
}
String match = input.subSequence(index, m.start()).toString();
matchList.add(match);
index = m.end();
} else if (matchList.size() == limit - 1) { // last one
String match = input.subSequence(index,
input.length()).toString();
matchList.add(match);
index = m.end();
}
}
// If no match was found, return this
if (index == 0)
return new String[] {input.toString()};
// Add remaining segment
if (!matchLimited || matchList.size() < limit)
matchList.add(input.subSequence(index, input.length()).toString());
// Construct result
int resultSize = matchList.size();
if (limit == 0)
while (resultSize > 0 && matchList.get(resultSize-1).equals(""))
resultSize--;
String[] result = new String[resultSize];
return matchList.subList(0, resultSize).toArray(result);
}
জাভা 8-তে নিম্নলিখিত কোডটি যুক্ত করা ইনপুট স্ট্রিংয়ের শুরুতে শূন্য দৈর্ঘ্যের ম্যাচ বাদ দেয় যা উপরের আচরণটি ব্যাখ্যা করে।
if (index == 0 && index == m.start() && m.start() == m.end()) {
// no empty leading substring included for zero-width match
// at the beginning of the input char sequence.
continue;
}
সামঞ্জস্য বজায় রাখা
জাভা 8 এবং তারপরে উপরের আচরণ অনুসরণ করা হচ্ছে
করতে splitধারাবাহিকভাবে সংস্করণ জুড়ে এবং জাভা 8 আচরণ সঙ্গে সামঞ্জস্যপূর্ণ আচরণ করবে:
- আপনার Regex যদি পারেন শূন্য দৈর্ঘ্যের স্ট্রিং মেলে, শুধু যোগ
(?!\A)সময়ে শেষ Regex ও অ ক্যাপচারিং দলের মূল Regex মোড়ানো (?:...)(প্রয়োজন হলে)।
- যদি আপনার রেজেক্স শূন্য দৈর্ঘ্যের স্ট্রিংয়ের সাথে মেলে না , তবে আপনাকে কিছু করার দরকার নেই।
- রেজেক্স শূন্য-দৈর্ঘ্যের স্ট্রিংয়ের সাথে মেলে কিনা তা আপনি যদি না জানেন তবে পদক্ষেপ 1 এ দুটি ক্রিয়া করুন in
(?!\A) স্ট্রিংটির শুরুতে স্ট্রিংটি শেষ হয় না তা পরীক্ষা করে, যা বোঝায় যে স্ট্রিংয়ের শুরুতে ম্যাচটি খালি ম্যাচ।
জাভা 7 এবং পূর্বের আচরণ অনুসরণ করা
splitজাভা with এর সাথে পশ্চাদপটে সামঞ্জস্যপূর্ণ করার কোনও সাধারণ সমাধান নেই এবং এর আগে, splitআপনার নিজস্ব কাস্টম প্রয়োগের দিকে নির্দেশ করার সমস্ত উদাহরণ প্রতিস্থাপনের সংক্ষিপ্ততা ।
s.split("(?!^)")কাজ মনে হচ্ছে।