আমি String[]
একটি আঠালো স্ট্রিং সঙ্গে একটি যোগ দিতে চাই । এর জন্য কোন অনুষ্ঠান আছে?
আমি String[]
একটি আঠালো স্ট্রিং সঙ্গে একটি যোগ দিতে চাই । এর জন্য কোন অনুষ্ঠান আছে?
উত্তর:
জাভা 8 থেকে শুরু করে এটি ব্যবহার করা সম্ভব String.join()
।
String.join(", ", new String[]{"Hello", "World", "!"})
উত্পন্ন:
Hello, World, !
অন্যথায়, অ্যাপাচি কমন্স ল্যাংয়ের একটি StringUtils
ক্লাস রয়েছে যার একটি join
ফাংশন রয়েছে যা একটি তৈরি করতে একসাথে অ্যারে যোগদান করবে String
।
উদাহরণ স্বরূপ:
StringUtils.join(new String[] {"Hello", "World", "!"}, ", ")
নিম্নলিখিত উত্পন্ন করে String
:
Hello, World, !
String.join()
জাভা ৮-তে প্রবর্তিত নতুন পদ্ধতির একটি রেফারেন্স সংযোজন করার জন্য আপনাকে এই উত্তরটি সম্পাদনা করার পরামর্শ দিচ্ছি This এইভাবে, বিপুল সংখ্যক লোকেরা এই স্বীকৃত উত্তরটি পড়ে সেই জ্ঞানটি থেকে উপকৃত হবে। বর্তমানে, এই সত্যটি উল্লেখ করে সর্বাধিক ভোট দেওয়া উত্তর বরং নীচে হারিয়ে গেছে ...
String.join()
শুধুমাত্র List<CharSequence>
বা CharSequence[]
উপাদানগুলির জন্য কাজ করবে তা উল্লেখযোগ্য ।
আপনি যদি অ্যান্ড্রয়েডে কী ব্যবহার করবেন তা যদি সন্ধান করে থাকেন তবে তা হ'ল:
String android.text.TextUtils.join(CharSequence delimiter, Object[] tokens)
উদাহরণ স্বরূপ:
String joined = TextUtils.join(";", MyStringArray);
জাভা 8 এ আপনি ব্যবহার করতে পারেন
1) স্ট্রিম এপিআই:
String[] a = new String[] {"a", "b", "c"};
String result = Arrays.stream(a).collect(Collectors.joining(", "));
2) নতুন স্ট্রিং.জয়িন পদ্ধতি: https://stackoverflow.com/a/21756398/466677
3) java.util.StringJoiner শ্রেণি: http://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html
আপনি কোডের দশটি লাইনে সহজেই এই জাতীয় ফাংশন লিখতে পারেন:
String combine(String[] s, String glue)
{
int k = s.length;
if ( k == 0 )
{
return null;
}
StringBuilder out = new StringBuilder();
out.append( s[0] );
for ( int x=1; x < k; ++x )
{
out.append(glue).append(s[x]);
}
return out.toString();
}
সাবস্ট্রিং () ব্যবহার করার পরিবর্তে কিছুটা মোড:
//join(String array,delimiter)
public static String join(String r[],String d)
{
if (r.length == 0) return "";
StringBuilder sb = new StringBuilder();
int i;
for(i=0;i<r.length-1;i++){
sb.append(r[i]);
sb.append(d);
}
sb.append(r[i]);
return sb.toString();
}
.append()
প্রতিটিের জন্য দু'বার ব্যবহারের String
পরিবর্তে তাদেরকে সম্মতি না দিয়ে পুনরায় বিল্ডারের সাথে যুক্ত করা হয় তবে এটি কি ভাল ।
ইদানীং অনেক প্রশ্নের সাথে, জাভা 8 উদ্ধার করতে:
জাভা 8 একটি নতুন স্থিতিশীল পদ্ধতি যুক্ত করেছে java.lang.String
যা আপনি যা চান ঠিক তা করে:
public static String join(CharSequence delimeter, CharSequence... elements);
এটি ব্যবহার করছি:
String s = String.join(", ", new String[] {"Hello", "World", "!"});
ফলাফল স্বরূপ:
"Hello, World, !"
গুগল পেয়ারার লাইব্রেরিতেও এই ধরণের ক্ষমতা রয়েছে । আপনি স্ট্রিং [] উদাহরণ এপিআই থেকেও দেখতে পাবেন।
ইতিমধ্যে এপিআই-তে বর্ণিত হিসাবে, নির্মাতা পদ্ধতিগুলির অপরিবর্তনীয়তা সম্পর্কে সতর্ক থাকুন।
এটি বস্তুর একটি অ্যারে গ্রহণ করতে পারে তাই এটি আপনার ক্ষেত্রে কাজ করবে। আমার আগের অভিজ্ঞতায় আমি একটি স্ট্যাকের সাথে যোগ দেওয়ার চেষ্টা করেছি যা একটি পুনরাবৃত্তিযোগ্য এবং এটি দুর্দান্ত কাজ করে।
আমার কাছ থেকে নমুনা:
Deque<String> nameStack = new ArrayDeque<>();
nameStack.push("a coder");
nameStack.push("i am");
System.out.println("|" + Joiner.on(' ').skipNulls().join(nameStack) + "|");
প্রিন্ট আউট: |i am a coder|
প্রদত্ত:
String[] a = new String[] { "Hello", "World", "!" };
তারপরে কুবার্ডের উত্তরের বিকল্প হিসাবে, আঠালো যেখানে ",":
Arrays.asList(a).toString().replaceAll("^\\[|\\]$", "")
অথবা "& amp;" এর মতো কোনও আলাদা স্ট্রিং দিয়ে সম্মিলিত করতে।
Arrays.asList(a).toString().replaceAll(", ", " & ").replaceAll("^\\[|\\]$", "")
তবে ... এটি কেবলমাত্র কাজ করে যদি আপনি জানেন যে অ্যারে বা তালিকার মানগুলিতে "," অক্ষর থাকে না contain
Arrays.asList(a).toString()
আমি যা করতে চেয়েছিলাম তার জন্য কাজ করেছে
আপনি যদি স্প্রিং ফ্রেমওয়ার্ক ব্যবহার করেন তবে আপনার কাছে স্ট্রিং ইউটিস ক্লাস রয়েছে:
import static org.springframework.util.StringUtils.arrayToDelimitedString;
arrayToDelimitedString(new String[] {"A", "B", "C"}, "\n");
মূল না, না। "জাভা অ্যারে জোড় স্ট্রিং আঠালো" এর জন্য অনুসন্ধান আপনাকে কীভাবে এটি অর্জন করতে পারে তার জন্য কিছু কোড স্নিপেট দেবে।
যেমন
public static String join(Collection s, String delimiter) {
StringBuffer buffer = new StringBuffer();
Iterator iter = s.iterator();
while (iter.hasNext()) {
buffer.append(iter.next());
if (iter.hasNext()) {
buffer.append(delimiter);
}
}
return buffer.toString();
}
যদি আপনি এখানে দ্রুত অ্যারে-থেকে-স্ট্রিং রূপান্তর খুঁজছেন, তবে অ্যারে.টো স্ট্রিং () ব্যবহার করে দেখুন ।
Object[]
পাসের একটি স্ট্রিং প্রতিনিধিত্ব তৈরি করে । ফলাফলটি বন্ধনী দ্বারা ঘিরে রয়েছে ("[]"
), প্রতিটি উপাদান একটি স্ট্রিংয়ে রূপান্তরিত হয়String.valueOf(Object)
এবং দ্বারা পৃথক করা হয়", "
। যদি অ্যারে হয়null
, তবে"null"
ফেরত দেওয়া হবে।
কেবল "আমি সবচেয়ে সংক্ষিপ্ততম একটি" চ্যালেঞ্জের জন্য, এখানে খনিগুলি রয়েছে;)
পুনরাবৃত্ত:
public static String join(String s, Object... a) {
StringBuilder o = new StringBuilder();
for (Iterator<Object> i = Arrays.asList(a).iterator(); i.hasNext();)
o.append(i.next()).append(i.hasNext() ? s : "");
return o.toString();
}
পুনরাবৃত্তি:
public static String join(String s, Object... a) {
return a.length == 0 ? "" : a[0] + (a.length == 1 ? "" : s + join(s, Arrays.copyOfRange(a, 1, a.length)));
}
copyOfRange()
") এর জন্য অকার্যকর ।
আমি অন্তর্নির্মিত কিছুই জানি না।
অ্যাপাচি কমন্স ল্যাং এর একটি ক্লাস StringUtils
রয়েছে যার মধ্যে অনেকগুলি যোগদানের ফাংশন রয়েছে।
এইভাবেই আমি এটি করি।
private String join(String[] input, String delimiter)
{
StringBuilder sb = new StringBuilder();
for(String value : input)
{
sb.append(value);
sb.append(delimiter);
}
int length = sb.length();
if(length > 0)
{
// Remove the extra delimiter
sb.setLength(length - delimiter.length());
}
return sb.toString();
}
একটি অনুরূপ বিকল্প
/**
* @param delimiter
* @param inStr
* @return String
*/
public static String join(String delimiter, String... inStr)
{
StringBuilder sb = new StringBuilder();
if (inStr.length > 0)
{
sb.append(inStr[0]);
for (int i = 1; i < inStr.length; i++)
{
sb.append(delimiter);
sb.append(inStr[i]);
}
}
return sb.toString();
}
আমার স্পিন
public static String join(Object[] objects, String delimiter) {
if (objects.length == 0) {
return "";
}
int capacityGuess = (objects.length * objects[0].toString().length())
+ ((objects.length - 1) * delimiter.length());
StringBuilder ret = new StringBuilder(capacityGuess);
ret.append(objects[0]);
for (int i = 1; i < objects.length; i++) {
ret.append(delimiter);
ret.append(objects[i]);
}
return ret.toString();
}
public static String join(Object... objects) {
return join(objects, "");
}
আপনি কি কেবল আমার স্ট্রিং ক্লাসের পদ্ধতি ব্যবহার করে আমার 3-লাইনের উপায় পছন্দ করেন?
static String join(String glue, String[] array) {
String line = "";
for (String s : array) line += s + glue;
return (array.length == 0) ? line : line.substring(0, line.length() - glue.length());
}
StringBuilder
দক্ষতার প্রয়োজন হলে ব্যবহার করুন : পি
আপনি যদি ফাংশনাল জাভা লাইব্রেরি ব্যবহার করছেন এবং কোনও কারণে জাভা 8 থেকে স্ট্রিম ব্যবহার করতে না পারেন (অ্যান্ড্রয়েড + রেট্রোলাম্বদা প্লাগইন ব্যবহার করার ক্ষেত্রে এটি হতে পারে), আপনার জন্য এখানে একটি কার্যকরী সমাধান রয়েছে:
String joinWithSeparator(List<String> items, String separator) {
return items
.bind(id -> list(separator, id))
.drop(1)
.foldLeft(
(result, item) -> result + item,
""
);
}
মনে রাখবেন যে এটি সবচেয়ে দক্ষ পদ্ধতির নয়, তবে এটি ছোট তালিকার পক্ষে ভাল কাজ করে।
আমি স্ট্রিংবিল্ডারটি ব্যবহার করে এটি করি:
public static String join(String[] source, String delimiter) {
if ((null == source) || (source.length < 1)) {
return "";
}
StringBuilder stringbuilder = new StringBuilder();
for (String s : source) {
stringbuilder.append(s + delimiter);
}
return stringbuilder.toString();
} // join((String[], String)
s + delimiter
(প্লাস অপারেটরের সাথে স্ট্রিং কনটেনটেশন) একটি ব্যবহারের পুরো উদ্দেশ্যকে পরাস্ত করে StringBuilder
।
আমি বেশিরভাগ সময় শর্টহ্যান্ড কৌশল ব্যবহার করি ..
String op = new String;
for (int i : is)
{
op += candidatesArr[i-1]+",";
}
op = op.substring(0, op.length()-1);
java.util.Arrays এর একটি 'asList' পদ্ধতি রয়েছে। Java.util.List / অ্যারেলিস্ট এপিআইয়ের সাথে একসাথে এটি আপনার যা প্রয়োজন তা দেয় :;
private static String[] join(String[] array1, String[] array2) {
List<String> list = new ArrayList<String>(Arrays.asList(array1));
list.addAll(Arrays.asList(array2));
return list.toArray(new String[0]);
}