আমি জানি এটি কিছুটা নবাগত প্রশ্ন, তবে জাভাতে সি # এর স্ট্রিং অপারেশনের সমতুল্য কি আছে?
বিশেষত, আমি String.Formatএবং সম্পর্কে কথা বলছি String.Join।
আমি জানি এটি কিছুটা নবাগত প্রশ্ন, তবে জাভাতে সি # এর স্ট্রিং অপারেশনের সমতুল্য কি আছে?
বিশেষত, আমি String.Formatএবং সম্পর্কে কথা বলছি String.Join।
উত্তর:
জাভা স্ট্রিং অবজেক্টটির একটি formatপদ্ধতি রয়েছে (২.৫ হিসাবে) তবে নেইjoin পদ্ধতি নেই।
ইতিমধ্যে অন্তর্ভুক্ত না থাকা স্ট্রিং ইউটিলিটি পদ্ধতিগুলির একগুচ্ছ পেতে আপনি org.apache.commons.lang.StringUtils ব্যবহার করতে পারেন ।
String.join()পদ্ধতি প্রবর্তন করে তা প্রতিবিম্বিত করতে আপনার এই উত্তরটি আপডেট করা উচিত ।
স্ট্রিং.ফর্ম্যাট । যোগদানের জন্য, আপনার নিজের লিখতে হবে:
static String join(Collection<?> s, String delimiter) {
StringBuilder builder = new StringBuilder();
Iterator<?> iter = s.iterator();
while (iter.hasNext()) {
builder.append(iter.next());
if (!iter.hasNext()) {
break;
}
builder.append(delimiter);
}
return builder.toString();
}
জাভা 8 হিসাবে, join() হিসাবে এখন স্ট্রিং ক্লাসে দুটি শ্রেণির পদ্ধতি হিসাবে উপলব্ধ। উভয় ক্ষেত্রে প্রথম যুক্তি হ'ল সীমানা।
আপনি অতিরিক্ত যুক্তি হিসাবে স্বতন্ত্র ব্যক্তিকে পাসCharSequence করতে পারেন :
String joined = String.join(", ", "Antimony", "Arsenic", "Aluminum", "Selenium");
// "Antimony, Arsenic, Alumninum, Selenium"
অথবা আপনি একটি পাসIterable<? extends CharSequence> করতে পারেন :
List<String> strings = new LinkedList<String>();
strings.add("EX");
strings.add("TER");
strings.add("MIN");
strings.add("ATE");
String joined = String.join("-", strings);
// "EX-TER-MIN-ATE"
জাভা 8 এছাড়াও একটি নতুন ক্লাস যুক্ত করেছে StringJoiner, যা আপনি এটির মতো ব্যবহার করতে পারেন:
StringJoiner joiner = new StringJoiner("&");
joiner.add("x=9");
joiner.add("y=5667.7");
joiner.add("z=-33.0");
String joined = joiner.toString();
// "x=9&y=5667.7&z=-33.0"
TextUtils.join Android এ উপলব্ধ
আপনি স্ট্রিংয়ের জন্য নিম্নরূপ পরিবর্তনশীল আর্গুমেন্টগুলিও ব্যবহার করতে পারেন:
String join (String delim, String ... data) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < data.length; i++) {
sb.append(data[i]);
if (i >= data.length-1) {break;}
sb.append(delim);
}
return sb.toString();
}
যোগদান হিসাবে, আমি বিশ্বাস করি এটি কিছুটা কম জটিল দেখায়:
public String join (Collection<String> c) {
StringBuilder sb=new StringBuilder();
for(String s: c)
sb.append(s);
return sb.toString();
}
আমি যতটা চাই জাভা 5 সিনট্যাক্সটি ব্যবহার করব না (বিশ্বাস করুন বা না করুন, আমি ইদানীং 1.0.x ব্যবহার করেছি) সুতরাং আমি কিছুটা মরিচা হতে পারি তবে আমি নিশ্চিত ধারণাটি সঠিক ।
সংযোজন সংযোজন: স্ট্রিং সংযোজনগুলি ধীর হতে পারে তবে আপনি যদি জিইউআই কোড বা কিছু স্বল্প-চলমান রুটিনে কাজ করে থাকেন তবে আপনি .005 সেকেন্ড বা .006 নেন কিনা তা আসলেই কিছু যায় আসে না, তাই যদি আপনার "joinMe" নামে একটি সংগ্রহ থাকে আপনি যে কোনও বিদ্যমান স্ট্রিং "টার্গেট" এ যুক্ত করতে চান তা কেবল এটির ইনলাইন করা ভয়াবহ হবে না:
for(String s : joinMe)
target += s;
এটি বেশ অদক্ষ (এবং একটি খারাপ অভ্যাস), তবে হাজার হাজার স্ট্রিং না থাকলে বা এটি একটি বিশাল লুপের অভ্যন্তরে না থাকে বা আপনার কোডটি কার্য সম্পাদন সমালোচনামূলক না হলে আপনি বুঝতে সক্ষম হবেন না।
আরও গুরুত্বপূর্ণ বিষয়, এটি মনে রাখা সহজ, সংক্ষিপ্ত, দ্রুত এবং খুব পাঠযোগ্য। পারফরম্যান্স সবসময় ডিজাইনের পছন্দগুলিতে স্বয়ংক্রিয় বিজয়ী হয় না।
এখানে একটি খুব সহজ উত্তর। +=এটি কম কোড হওয়ায় ব্যবহার করুন এবং অপ্টিমাইজারটি এটি আপনার জন্য একটিতে রূপান্তর StringBuilderকরতে দিন। এই পদ্ধতিটি ব্যবহার করে, আপনার লুপের (পারফরম্যান্স উন্নতি) কোনও "শেষ" পরীক্ষা করার দরকার নেই এবং আপনাকে শেষে কোনও ডিলিমিটারগুলি কেড়ে নেওয়ার বিষয়ে চিন্তা করতে হবে না।
Iterator<String> iter = args.iterator();
output += iter.hasNext() ? iter.next() : "";
while (iter.hasNext()) {
output += "," + iter.next();
}
আমি একটি সাধারণ যোগদানের ফাংশন যোগ করতে একটি সম্পূর্ণ অ্যাপাচি পাঠাগারটি আমদানি করতে চাইনি, তাই আমার হ্যাকটি এখানে।
public String join(String delim, List<String> destinations) {
StringBuilder sb = new StringBuilder();
int delimLength = delim.length();
for (String s: destinations) {
sb.append(s);
sb.append(delim);
}
// we have appended the delimiter to the end
// in the previous for-loop. Let's now remove it.
if (sb.length() >= delimLength) {
return sb.substring(0, sb.length() - delimLength);
} else {
return sb.toString();
}
}
removeCharAtবিদ্যমান নয়, এবং সমগ্র ফাংশন আর স্ট্রিং ফেরৎ ... এই ঠিক করবে।
আপনি যদি একাধিক স্ট্রিংগুলিতে একসাথে (কনটেনেট) যোগ দিতে চান তবে আপনার স্ট্রিংবিল্ডার ব্যবহার করা উচিত। এটি ব্যবহার করার চেয়ে অনেক ভাল
for(String s : joinMe)
target += s;
স্ট্রিংবুফারের উপর সামান্য পারফরম্যান্সের জয়ও রয়েছে, যেহেতু স্ট্রিংবুডার সিঙ্ক্রোনাইজেশন ব্যবহার করে না।
এর মতো সাধারণ উদ্দেশ্যে ইউটিলিটি পদ্ধতির জন্য, এটিকে (শেষ পর্যন্ত) অনেক পরিস্থিতিতে ডাকা হবে, সুতরাং আপনার এটিকে দক্ষ করা উচিত এবং বহু ক্ষণস্থায়ী বস্তু বরাদ্দ করা উচিত নয়। আমরা অনেকগুলি, বিভিন্ন বিভিন্ন জাভা অ্যাপ্লিকেশনকে প্রোফাইল করেছি এবং প্রায় সর্বদা খুঁজে পাই যে স্ট্রিং কনটেনটেশন এবং স্ট্রিং / চর [] বরাদ্দগুলি উল্লেখযোগ্য পরিমাণ সময় / স্মৃতি গ্রহণ করে।
আমাদের পুনরায় ব্যবহারযোগ্য সংগ্রহ -> স্ট্রিং পদ্ধতি প্রথমে প্রয়োজনীয় ফলাফলের আকার গণনা করে এবং তারপরে সেই প্রাথমিক আকারের সাথে একটি স্ট্রিংবিল্ডার তৈরি করে; এটি স্ট্রিং সংযোজন করার সময় ব্যবহৃত অভ্যন্তরীণ চর [] এর অনাকাঙ্ক্ষিত দ্বিগুণ / অনুলিপি এড়ানো যায়।
আমি নিজস্ব লিখেছি:
public static String join(Collection<String> col, String delim) {
StringBuilder sb = new StringBuilder();
Iterator<String> iter = col.iterator();
if (iter.hasNext())
sb.append(iter.next().toString());
while (iter.hasNext()) {
sb.append(delim);
sb.append(iter.next().toString());
}
return sb.toString();
}
তবে Collectionজেএসপি সমর্থিত নয়, তাই ট্যাগ ফাংশনের জন্য আমি লিখেছিলাম:
public static String join(List<?> list, String delim) {
int len = list.size();
if (len == 0)
return "";
StringBuilder sb = new StringBuilder(list.get(0).toString());
for (int i = 1; i < len; i++) {
sb.append(delim);
sb.append(list.get(i).toString());
}
return sb.toString();
}
এবং .tldফাইল করা:
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee"
<function>
<name>join</name>
<function-class>com.core.util.ReportUtil</function-class>
<function-signature>java.lang.String join(java.util.List, java.lang.String)</function-signature>
</function>
</taglib>
এবং এটি জেএসপি ফাইলগুলিতে ব্যবহার করুন:
<%@taglib prefix="funnyFmt" uri="tag:com.core.util,2013:funnyFmt"%>
${funnyFmt:join(books, ", ")}
স্ট্রিংউটিলস অ্যাপাচি কমন্স ল্যাং লাইব্রেরিতে একটি বেশ দরকারী বর্গ।
নেই MessageFormat.format()যা সি # 'গুলি মত কাজ করে String.Format()।
আমি এখানে স্ট্রিং.জয়িনের অত্যধিক জটিল বাস্তবায়ন দেখতে পাই। আপনার যদি জাভা 1.8 না থাকে এবং আপনি কোনও নতুন লাইব্রেরি আমদানি করতে চান না তবে নীচের প্রয়োগটি যথেষ্ট should
public String join(Collection<String> col, String delim) {
StringBuilder sb = new StringBuilder();
for ( String s : col ) {
if ( sb.length() != 0 ) sb.append(delim);
sb.append(s);
}
return sb.toString();
}
ArrayList<Double> j=new ArrayList<>;
j.add(1);
j.add(.92);
j.add(3);
String ntop=j.toString(); //ntop= "[1, 0.92, 3]"
সুতরাং মূলত, স্ট্রিং এনটপ কমা বিভাজক এবং বন্ধনী সহ পুরো সংগ্রহের মান সঞ্চয় করে।
আমি দুটি স্ট্রিংয়ে যোগ দিতে কেবল স্ট্রিং কনটেনটেশন অপারেটরটি ব্যবহার করব। s1 += s2;