জাভা: তালিকা <স্ট্রিং> কে একটি স্ট্রিতে রূপান্তর করুন


594

জাভাস্ক্রিপ্ট আছে Array.join()

js>["Bill","Bob","Steve"].join(" and ")
Bill and Bob and Steve

জাভা এর কিছু আছে কি? আমি জানি আমি স্ট্রিংবিল্ডারের সাহায্যে নিজেকে কিছুটা গুঁজে দিতে পারি:

static public String join(List<String> list, String conjunction)
{
   StringBuilder sb = new StringBuilder();
   boolean first = true;
   for (String item : list)
   {
      if (first)
         first = false;
      else
         sb.append(conjunction);
      sb.append(item);
   }
   return sb.toString();
}

... তবে এটির মতো কিছু যদি ইতিমধ্যে জেডিকে-র অংশ হয় তবে এটি করার কোনও অর্থ নেই।



18
কঠোরভাবে সম্পর্কিত নয় তবে অ্যান্ড্রয়েড তাদের টেক্সটUtils শ্রেণীর অংশ হিসাবে একটি অন্তর্নির্মিত ফাংশন রয়েছে: বিকাশকারী.অ্যান্ড্রয়েড. com/references/android/text/… , java.lang.Iterable)
জাভি

16
জাভা 8 এর একটি String.join()পদ্ধতি রয়েছে। আপনি জাভা 8 (বা আরও নতুন) স্ট্যাকওভারফ্লো.com
22577565/

উত্তর:


761

জাভা 8 এর সাহায্যে আপনি কোনও তৃতীয় পক্ষের লাইব্রেরি ছাড়াই এটি করতে পারেন।

আপনি যদি স্ট্রিংয়ের সংগ্রহে যোগদান করতে চান তবে আপনি নতুন স্ট্রিং.জয়াইন () পদ্ধতিটি ব্যবহার করতে পারেন :

List<String> list = Arrays.asList("foo", "bar", "baz");
String joined = String.join(" and ", list); // "foo and bar and baz"

আপনার যদি স্ট্রিংয়ের চেয়ে অন্য ধরণের সংগ্রহ রয়েছে তবে আপনি যোগদানকারী সংগ্রাহকের সাথে স্ট্রিম এপিআই ব্যবহার করতে পারেন :

List<Person> list = Arrays.asList(
  new Person("John", "Smith"),
  new Person("Anna", "Martinez"),
  new Person("Paul", "Watson ")
);

String joinedFirstNames = list.stream()
  .map(Person::getFirstName)
  .collect(Collectors.joining(", ")); // "John, Anna, Paul"

StringJoinerবর্গ এছাড়াও দরকারী হতে পারে।


7
দুর্ভাগ্যক্রমে, স্ট্রিং.জোঁইন কেবল চার সিক্যেন্সকেই গ্রহণ করে এবং এক হিসাবে প্রত্যাশাগুলি আশা করে না। এমনকি এটি নিশ্চিত নয় যে এটি নালসফ
মারক

@ মার্কassertThat(String.join(", ", Lists.newArrayList("1", null)), is("1, null"));
সংঘিউন লি

স্ট্রিংজাইনার বিশেষত কার্যকর যদি কেউ ব্রেসেস [a, b, c]সহ কিছু যুক্ত করতে চায় ।
কোপ্পোর

@ মার্ক স্ট্রিং.জাইনও গ্রহণ করে Iterable<CharSequence>; ইন্টারফেস সম্পর্ক:Iterable -> Collection -> List
Aff

306

অ্যাপাচি কমন্সের সমস্ত উল্লেখগুলি ঠিক আছে (এবং এটি বেশিরভাগ লোকেরা ব্যবহার করে) তবে আমার কাছে মনে হয় পেয়ারা সমতুল্য, জোদার , এর অনেক ভাল API রয়েছে।

আপনি এর সাথে সহজ যোগদানের কেসটি করতে পারেন

Joiner.on(" and ").join(names)

তবে সহজেই নালগুলি মোকাবেলা করুন:

Joiner.on(" and ").skipNulls().join(names);

অথবা

Joiner.on(" and ").useForNull("[unknown]").join(names);

এবং (কমন্স-ল্যাংয়ের অগ্রাধিকার হিসাবে এটি ব্যবহার করার বিষয়ে আমি যতটা উদ্বিগ্ন তা যথেষ্ট দরকারী), মানচিত্রের সাথে ডিল করার ক্ষমতা:

Map<String, Integer> ages = .....;
String foo = Joiner.on(", ").withKeyValueSeparator(" is ").join(ages);
// Outputs:
// Bill is 25, Joe is 30, Betty is 35

যা ডিবাগিং ইত্যাদির জন্য অত্যন্ত কার্যকর


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

2
এটি দুর্দান্ত, তবে আপনি কি দয়া করে কোনও .useForLastSeparator()বা অনুরূপ কোনও পদ্ধতি যুক্ত করতে পারেন ? এইভাবে, আপনি কেবলমাত্র দুটি শেষ আইটেমের মধ্যে ", এবং" এর মতো কিছু পেতে পারেন (বাকিগুলির জন্য "," সাথে)।
জেফ ইভানস

2
হ্যাঁ, এটি থ্রেড নিরাপদ। যোগদানকারীর মধ্যে সংরক্ষিত একমাত্র রাষ্ট্র হ'ল separator(যা final)। আমি পেয়ারাতে যা দেখেছি, যেখানে আমি অ্যাপাচি কমন্স সমতুল্য ব্যবহার করতাম সেগুলি আরও ভাল হয়েছে (পড়ুন: ক্লিনার, দ্রুত, নিরাপদ এবং সাধারণভাবে আরও বেশি শক্তিশালী) কম প্রান্তের ক্ষেত্রে ব্যর্থতা এবং থ্রেড সুরক্ষা সমস্যা এবং ছোট মেমরি পদচিহ্ন। তাদের "সর্বোত্তম উপায়ে সম্ভব" গাইডিং প্রিন্সিপাল এখন পর্যন্ত সত্য বলে মনে হয়েছে।
শ্যাডো ম্যান

যদি আপনাকে বিপরীত দিকে যেতে হয় (অর্থাত্ কোনও স্ট্রিংকে টুকরো টুকরো করে ভাগ করা), তবে পেয়ারা ক্লাসের স্প্লিটারটি দেখুন - এছাড়াও খুব ভালভাবে ডিজাইন / প্রয়োগ করা হয়েছে।
ম্যাট পাসেল

জাভা 8-তে একটি String.join()পদ্ধতি এবং একটি StringJoinerক্লাস রয়েছে।
টেকনোকিড

138

বাক্সের বাইরে নয়, তবে অনেক লাইব্রেরিতে একই রকম রয়েছে:

কমন্স ল্যাং:

org.apache.commons.lang.StringUtils.join(list, conjunction);

বসন্ত:

org.springframework.util.StringUtils.collectionToDelimitedString(list, conjunction);

125

উপর অ্যান্ড্রয়েড আপনি ব্যবহার করতে পারে TextUtils বর্গ।

TextUtils.join(" and ", names);

11
আমি এটা খুঁজছিলাম। অ্যান্ড্রয়েডে ন্যূনতম এপিআই স্তরের 26String.join প্রয়োজন ।
ওকরাকোজ

49

না, স্ট্যান্ডার্ড জাভা এপিআইতে এ জাতীয় কোনও সুবিধা পদ্ধতি নেই।

অবাক হওয়ার মতো বিষয় নয়, আপনি নিজেরাই এটি লিখতে না চাইলে অ্যাপাচি কমন্স তাদের স্ট্রিংগিলস শ্রেণিতে এমন একটি জিনিস সরবরাহ করে


11
এটি আমাকে সর্বদা বগড করে দেয় যে স্ট্রিংয়ের একটি বিভাজন রয়েছে তবে যোগদানের নয়। একভাবে এটি বোঝায় যে এটি এটি করে তবে এটি কেবল বিরক্তিকর যে স্ট্রিংয়ে এটির জন্য কমপক্ষে কোনও স্থিতিশীল পদ্ধতি নেই।
পাওয়ারলর্ড

3
আমি তোমার সাথে বেমরোজ। অন্তত তারা আমাদের একটি দিয়েছিলাম isEmpty()পরিবর্তে পদ্ধতি একটি (স্ট্যাটিক) join()পদ্ধতি String:): rollseyes: ...
বার্ট Kiers

41

জাভা 8 এ তিনটি সম্ভাবনা:

List<String> list = Arrays.asList("Alice", "Bob", "Charlie")

String result = String.join(" and ", list);

result = list.stream().collect(Collectors.joining(" and "));

result = list.stream().reduce((t, u) -> t + " and " + u).orElse("");

27

জাভা 8 সংগ্রাহক সহ, নিম্নলিখিত কোডের সাহায্যে এটি করা যেতে পারে:

Arrays.asList("Bill", "Bob", "Steve").stream()
.collect(Collectors.joining(" and "));

এছাড়াও, জাভা 8 এর সহজ সমাধান:

String.join(" and ", "Bill", "Bob", "Steve");

অথবা

String.join(" and ", Arrays.asList("Bill", "Bob", "Steve"));

21

আমি এটি লিখেছি (আমি এটি মটরশুটি এবং শোষণের জন্য ব্যবহার করি toString, তাই লিখি না Collection<String>):

public static String join(Collection<?> col, String delim) {
    StringBuilder sb = new StringBuilder();
    Iterator<?> 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, ", ")}

1
পরিবর্তন Collection<>করার পরামর্শ দিচ্ছেন Iterable<>?
জেসন এস

@ জেসনস +1। গুড পয়েন্ট, কিন্তু পঠিত stackoverflow.com/questions/1159797/...
gavenkoa

19

আপনি যদি কোনও বাহ্যিক লাইব্রেরি ছাড়াই জেডিকে ব্যবহার করতে চান তবে আপনার কোডটি সঠিকভাবে করা। এমন কোনও সাধারণ "ওয়ান-লাইনার" নেই যা আপনি জেডিকে ব্যবহার করতে পারেন।

আপনি যদি বাহ্যিক libs ব্যবহার করতে পারেন তবে আমি আপনাকে সুপারিশ করছি যে আপনি অ্যাপাচি কমন্স লাইব্রেরিতে org.apache.commons.lang.StringUtils শ্রেণিতে সন্ধান করুন ।

ব্যবহারের একটি উদাহরণ:

List<String> list = Arrays.asList("Bill", "Bob", "Steve");
String joinedResult = StringUtils.join(list, " and ");

17

এটি অর্জনের একটি গোঁড়া উপায় হল একটি নতুন ফাংশন সংজ্ঞায়িত করে:

public static String join(String joinStr, String... strings) {
    if (strings == null || strings.length == 0) {
        return "";
    } else if (strings.length == 1) {
        return strings[0];
    } else {
        StringBuilder sb = new StringBuilder(strings.length * 1 + strings[0].length());
        sb.append(strings[0]);
        for (int i = 1; i < strings.length; i++) {
            sb.append(joinStr).append(strings[i]);
        }
        return sb.toString();
    }
}

নমুনা:

String[] array = new String[] { "7, 7, 7", "Bill", "Bob", "Steve",
        "[Bill]", "1,2,3", "Apple ][","~,~" };

String joined;
joined = join(" and ","7, 7, 7", "Bill", "Bob", "Steve", "[Bill]", "1,2,3", "Apple ][","~,~");
joined = join(" and ", array); // same result

System.out.println(joined);

আউটপুট:

7, 7, 7 এবং বিল এবং বব এবং স্টিভ এবং [বিল] এবং 1,2,3 এবং অ্যাপল] [এবং ~,


5
পদ্ধতিটির নিজস্ব নাম হিসাবে কোনও প্যারামিটারকে একই নাম দেওয়া সম্ভবত সেরা ধারণা নয়। separatorআরো অনেক পরামর্শমূলক হবে।
সিসিপিজ্জা

10

সঙ্গে জাভা 8 সমাধান java.util.StringJoiner

জাভা 8 একটি StringJoinerক্লাস পেয়েছে । তবে আপনার এখনও কিছুটা বয়লারপ্লেট লিখতে হবে, কারণ এটি জাভা।

StringJoiner sj = new StringJoiner(" and ", "" , "");
String[] names = {"Bill", "Bob", "Steve"};
for (String name : names) {
   sj.add(name);
}
System.out.println(sj);

আপনি যদি আরও সুবিধাজনক পদ্ধতি স্ট্রিং.জাইন () ব্যবহার করেন তবে আপনাকে কিছুটা বয়লারপ্লেট লেখার দরকার নেই ।
অ্যান্ডি টমাস

9

আপনি অ্যাপাচি কমন্স লাইব্রেরি ব্যবহার করতে পারেন যার স্ট্রিংউটিলস শ্রেণি এবং একটি যোগদানের পদ্ধতি রয়েছে।

এই লিঙ্কটি দেখুন: https://commons.apache.org/proper/commons-lang/javadocs/api.2.0/org/apache/commons/lang/StringUtils.html

নোট করুন যে উপরের লিঙ্কটি সময়ের সাথে সাথে অচল হয়ে যেতে পারে, সেক্ষেত্রে আপনি কেবল "অ্যাপাচি কমন্স স্ট্রিং ইউটিস" অনুসন্ধান করতে পারেন যা আপনাকে সর্বশেষতম রেফারেন্সটি সন্ধান করার অনুমতি দেয়।

(এই থ্রেড থেকে রেফারেন্স) সি # স্ট্রিং.ফর্ম্যাট () এবং স্ট্রিং.জাইন () এর জাভা সমতুল্য


7

তুমি এটি করতে পারো:

String aToString = java.util.Arrays.toString(anArray);
// Do not need to do this if you are OK with '[' and ']'
aToString = aToString.substring(1, aToString.length() - 1);

বা একটি ওয়ান-লাইনার (কেবল যখন আপনি '[' এবং ']' না চান)

String aToString = java.util.Arrays.toString(anArray).substring(1).replaceAll("\\]$", "");

আশাকরি এটা সাহায্য করবে.


1
এটি পছন্দের সংমিশ্রণটি যুক্ত করবে না।
হেক্সিয়াম

ওহো !! আমি দুঃখিত, আমি এটি খুঁজে পাইনি।
নওয়ামন

6

খাঁটি জেডিকে দিয়ে এটি করার একটি মজার উপায়, একটি ডিউটি ​​লাইনে:

String[] array = new String[] { "Bill", "Bob", "Steve","[Bill]","1,2,3","Apple ][" };
String join = " and ";

String joined = Arrays.toString(array).replaceAll(", ", join)
        .replaceAll("(^\\[)|(\\]$)", "");

System.out.println(joined);

আউটপুট:

বিল এবং বব এবং স্টিভ এবং [বিল] এবং 1,2,3 এবং অ্যাপল] [


খুব নিখুঁত এবং খুব মজাদার উপায় নয়!

String[] array = new String[] { "7, 7, 7","Bill", "Bob", "Steve", "[Bill]",
        "1,2,3", "Apple ][" };
String join = " and ";

for (int i = 0; i < array.length; i++) array[i] = array[i].replaceAll(", ", "~,~");
String joined = Arrays.toString(array).replaceAll(", ", join)
        .replaceAll("(^\\[)|(\\]$)", "").replaceAll("~,~", ", ");

System.out.println(joined);

আউটপুট:

7, 7, 7 এবং বিল এবং বব এবং স্টিভ এবং [বিল] এবং 1,2,3 এবং অ্যাপল] [


"[বিল]", "1,2,3" এবং "অ্যাপল] [" দিয়ে এটি ব্যবহার করে দেখুন। সৃজনশীল, তবে এটির ক্ষেত্রে এটি ভুল রয়েছে।
জেসন এস

1
এখন এটি "~, ~" দিয়ে চেষ্টা করুন। আপনি এই ধরণের আর্কিটেকচারকে পুরোপুরি বুলেটপ্রুফ দিয়ে কোনও প্রোগ্রাম তৈরি করতে পারবেন না।
জেসন এস

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

1
আমি আমার মতো পোস্টগুলি থেকে এখানে অনেক কিছুই শিখি, নিখুঁত সমাধান না দিয়ে, তবে সত্যই জ্ঞানের সমৃদ্ধ, এবং পার্শ্বচিন্তা। অন্যদের জন্য স্বাচ্ছন্দ্য বোধ করুন, প্রত্যেককে তাদের কোডের প্রতিটি লাইন কী করে তা বুঝতে হবে। মনে রাখবেন প্রোগ্রামিং একটি শিল্পের মতো, এবং কোডের প্রতিটি লাইনই প্রোগ্রামার ব্যক্তিত্ব সম্পর্কে কিছু বোঝায়। এবং হ্যাঁ, আমি এই কোডটি প্রযোজনায় ব্যবহার করব না!
ড্যানিয়েল ডি লিয়ন

4

আপনি অ্যাপাচি কমন্স স্ট্রিং ইউটিসটিতে যোগদানের পদ্ধতিতে চেষ্টা করতে পারেন:

http://commons.apache.org/lang/api/org/apache/commons/lang/StringUtils.html#join(java.util.Iterator , java.lang.String)

আমি খুঁজে পেয়েছি যে আপাচি স্ট্রিং ইউটিলস জেডকের ঝাঁকুনি তুলেছে ;-)


4

আপনি যদি গ্রিপস সংগ্রহ (পূর্বে জিএস সংগ্রহ ) ব্যবহার করেন তবে আপনি এই makeString()পদ্ধতিটি ব্যবহার করতে পারেন ।

List<String> list = Arrays.asList("Bill", "Bob", "Steve");

String string = ListAdapter.adapt(list).makeString(" and ");

Assert.assertEquals("Bill and Bob and Steve", string);

আপনি যদি Listএকটি Eclipse সংগ্রহের ধরণে রূপান্তর করতে পারেন তবে আপনি অ্যাডাপ্টার থেকে মুক্তি পেতে পারেন।

MutableList<String> list = Lists.mutable.with("Bill", "Bob", "Steve");
String string = list.makeString(" and ");

আপনি যদি কেবল কমা দ্বারা পৃথক স্ট্রিং চান তবে আপনি makeString()যে সংস্করণটির কোনও পরামিতি নেন তা ব্যবহার করতে পারেন ।

Assert.assertEquals(
    "Bill, Bob, Steve", 
    Lists.mutable.with("Bill", "Bob", "Steve").makeString());

দ্রষ্টব্য: আমি গ্রহগ্রাহ সংগ্রহের প্রতিশ্রুতিবদ্ধ।


3

জাভা সহ 1.8 স্ট্রিম ব্যবহার করা যেতে পারে,

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
List<String> list = Arrays.asList("Bill","Bob","Steve").
String str = list.stream().collect(Collectors.joining(" and "));

3

সম্পাদনা

আমি toString()অন্তর্নিহিত বাস্তবায়ন ইস্যুটি এবং বিভাজকযুক্ত উপাদান সম্পর্কেও লক্ষ্য করি তবে আমি ভেবেছিলাম যে আমি বেহাল হয়ে যাচ্ছি।

যেহেতু আমি এই বিষয়ে দুটি মন্তব্য পেয়েছি, তাই আমি আমার উত্তরটি পরিবর্তন করছি:

static String join( List<String> list , String replacement  ) {
    StringBuilder b = new StringBuilder();
    for( String item: list ) { 
        b.append( replacement ).append( item );
    }
    return b.toString().substring( replacement.length() );
}

যা দেখতে মূল প্রশ্নের সাথে বেশ মিল রয়েছে।

সুতরাং আপনি যদি আপনার প্রকল্পে পুরো জার যোগ করার মতো অনুভব না করেন তবে আপনি এটি ব্যবহার করতে পারেন।

আমি মনে করি আপনার মূল কোডটিতে কোনও ভুল নেই। প্রকৃতপক্ষে, সবাই যে বিকল্পটির পরামর্শ দিচ্ছে এটি প্রায় একইরকম দেখাচ্ছে (যদিও এটি বেশ কয়েকটি অতিরিক্ত বৈধতা দেয়)

এটি এখানে অ্যাপাচি ২.০ লাইসেন্সের সাথে রয়েছে।

public static String join(Iterator iterator, String separator) {
    // handle null, zero and one elements before building a buffer
    if (iterator == null) {
        return null;
    }
    if (!iterator.hasNext()) {
        return EMPTY;
    }
    Object first = iterator.next();
    if (!iterator.hasNext()) {
        return ObjectUtils.toString(first);
    }

    // two or more elements
    StringBuffer buf = new StringBuffer(256); // Java default is 16, probably too small
    if (first != null) {
        buf.append(first);
    }

    while (iterator.hasNext()) {
        if (separator != null) {
            buf.append(separator);
        }
        Object obj = iterator.next();
        if (obj != null) {
            buf.append(obj);
        }
    }
    return buf.toString();
}

এখন আমরা জানি, ওপেন সোর্স আপনাকে ধন্যবাদ


এটি এখনই কাজ করবে তবে ভবিষ্যতে List.toString () কীভাবে আচরণ করবে তা আপনি নিশ্চিত হতে পারবেন না। আমি প্রশ্নে থাকা অবজেক্টটি সম্পর্কে কিছু তথ্যের স্ট্রিং প্রিন্ট করা ছাড়া কোনও টস্ট্রিং () অপারেশনে বিশ্বাস করব না। আপনার প্রতিরক্ষা হিসাবে, আপনি একমাত্র এই সমাধানটি প্রস্তাব করেন না।
হ্যান্স ডোগজেন

যদি তালিকার কোনও উপাদানটির বিষয়বস্তুগুলিতে স্ট্রিং থাকে ", "?
বার্ট কায়ার্স

@ હંস এবং @ বার্ট: আপনি ঠিক বলেছেন। আমি ভেবেছিলাম অন্য কেউ খেয়াল করবে না: পি আমি আমার উত্তর পরিবর্তন করছি।
অস্কাররাইজ

এটি ব্যবহারের ক্ষেত্রে নির্ভর করে। ডিবাগিংয়ের উদ্দেশ্যে স্ট্রিং () কেবল আইএমও ... ঠিক আছে যদি আপনি নির্দিষ্ট বিন্যাসের উপর নির্ভর না করেন। এবং তবুও, আপনি যদি আপনার কোডের জন্য একটি পরীক্ষা লিখেন তবে ভবিষ্যতের কোনও পরিবর্তন ধরা পড়বে।
akostadinov

2

গুগলের পেয়ারা এপিআই-তেও .join () রয়েছে, যদিও (অন্যান্য জবাবগুলির সাথে এটি স্পষ্ট হওয়া উচিত), অ্যাপাচি কমন্স এখানকার মান অনেক বেশি pretty


1

জাভা 8 এনে দেয়

Collectors.joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix)

পদ্ধতি, এটি ব্যবহার করে নালাসেফ prefix + suffix নাল মানগুলির জন্য ।

এটি নিম্নলিখিত পদ্ধতিতে ব্যবহার করা যেতে পারে:

String s = stringList.stream().collect(Collectors.joining(" and ", "prefix_", "_suffix"))

Collectors.joining(CharSequence delimiter)পদ্ধতি মাত্র কল joining(delimiter, "", "")অভ্যন্তরীণভাবে।


0

আপনি এটি স্প্রিং ফ্রেমওয়ার্কের স্ট্রিং ইউটিলস থেকে ব্যবহার করতে পারেন। আমি জানি এটি ইতিমধ্যে উল্লেখ করা হয়েছে, তবে আপনি আসলে এই কোডটি নিতে পারেন এবং এটির জন্য স্প্রিংয়ের প্রয়োজন ছাড়াই এটি অবিলম্বে কাজ করে।

// from https://github.com/spring-projects/spring-framework/blob/master/spring-core/src/main/java/org/springframework/util/StringUtils.java

/*
 * Copyright 2002-2017 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
public class StringUtils {
    public static String collectionToDelimitedString(Collection<?> coll, String delim, String prefix, String suffix) {
        if(coll == null || coll.isEmpty()) {
            return "";
        }
        StringBuilder sb = new StringBuilder();
        Iterator<?> it = coll.iterator();
        while (it.hasNext()) {
            sb.append(prefix).append(it.next()).append(suffix);
            if (it.hasNext()) {
                sb.append(delim);
            }
        }
        return sb.toString();
    }
}

-3

এটা চেষ্টা কর:

java.util.Arrays.toString(anArray).replaceAll(", ", ",")
                .replaceFirst("^\\[","").replaceFirst("\\]$","");

1
সম্ভবত কারণ প্রশ্নটি একটি অ্যারে বনাম একটি তালিকা ব্যবহারের জন্য কল করে? অসহায়তা
নিক Coelius

4
কারণ আপনার স্ট্রিংগুলিতে যদি একটি "," থাকে তবে এটি কাজ করবে না।
সিরিল পন্টভিউক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.