একটি তালিকা কমা-সীমাবদ্ধ করার সহজ উপায়?


104

জাভাতে কমা-সীমানা ছাড়ানোর সুস্পষ্ট উপায় কী?

আমি এটি করার বিভিন্ন উপায় জানি, তবে আমি ভাবছি যে সর্বোত্তম উপায়টি কী (যেখানে "সেরা" মানে সবচেয়ে স্পষ্ট এবং / বা সবচেয়ে সংক্ষিপ্ততম, সবচেয়ে দক্ষ নয়।

আমার একটি তালিকা রয়েছে এবং আমি প্রতিটি মান মুদ্রণ করে এটি লুপ করতে চাই। আমি প্রতিটি আইটেমের মধ্যে কমা মুদ্রণ করতে চাই, তবে শেষের পরে নয় (প্রথমটির আগে নয়)।

List --> Item ( , Item ) *
List --> ( Item , ) * Item

নমুনা সমাধান 1:

boolean isFirst = true;
for (Item i : list) {
  if (isFirst) {
    System.out.print(i);        // no comma
    isFirst = false;
  } else {
    System.out.print(", "+i);   // comma
  }
}

নমুনা সমাধান 2 - একটি সাবলিস্ট তৈরি করুন:

if (list.size()>0) {
  System.out.print(list.get(0));   // no comma
  List theRest = list.subList(1, list.size());
  for (Item i : theRest) {
    System.out.print(", "+i);   // comma
  }
}

নমুনা সমাধান 3:

  Iterator<Item> i = list.iterator();
  if (i.hasNext()) {
    System.out.print(i.next());
    while (i.hasNext())
      System.out.print(", "+i.next());
  }

এগুলি প্রথম আইটেমটি বিশেষভাবে আচরণ করে; এর পরিবর্তে একজন শেষেরটিকে বিশেষভাবে চিকিত্সা করতে পারে।

ঘটনাচক্রে, জাভা 1.6 এ এখানে কীভাবে প্রয়োগ করা List toString হয় (এটি উত্তরাধিকার সূত্রে প্রাপ্ত AbstractCollection):

public String toString() {
    Iterator<E> i = iterator();
    if (! i.hasNext())
        return "[]";

    StringBuilder sb = new StringBuilder();
    sb.append('[');
    for (;;) {
        E e = i.next();
        sb.append(e == this ? "(this Collection)" : e);
        if (! i.hasNext())
            return sb.append(']').toString();
        sb.append(", ");
    }
}

শেষ আইটেমের পরে কমা এড়ানোর জন্য এটি প্রথম দিকে লুপটি থেকে বেরিয়ে যায়। বিটিডাব্লু: এই প্রথম "(এই সংগ্রহ)" দেখে মনে পড়ছে; এটি উস্কে দেওয়ার কোড এখানে:

List l = new LinkedList();
l.add(l);
System.out.println(l);

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

স্পষ্টকরণ : লাইব্রেরি দ্বারা, আমি মানক জাভা গ্রন্থাগারগুলি বোঝাতে চাইছি। অন্যান্য গ্রন্থাগারের জন্য, আমি তাদের অন্যান্য ভাষার সাথে বিবেচনা করি এবং সেগুলি কীভাবে প্রয়োগ করা হয় তা জানতে আগ্রহী।

এডিআইটি টুলকিট একটি অনুরূপ প্রশ্নের উল্লেখ করেছে: জাবাতে লুপের জন্য বর্ধিত শেষের পুনরাবৃত্তি

এবং আরেকটি: লুপের শেষ উপাদানটি কী আলাদা চিকিত্সার দাবি করে?


উত্তর:


226

জাভা 8 এবং তারপরে

StringJoinerক্লাস ব্যবহার :

StringJoiner joiner = new StringJoiner(",");
for (Item item : list) {
    joiner.add(item.toString());
}
return joiner.toString();

ব্যবহার Stream, এবং Collectors:

return list.stream().
       map(Object::toString).
       collect(Collectors.joining(",")).toString();

জাভা 7 এবং তার আগের

আরও দেখুন # 285523

String delim = "";
for (Item i : list) {
    sb.append(delim).append(i);
    delim = ",";
}

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

1
আমি এটি পছন্দ করি তবে এটি চতুর এবং অবাক হওয়ার কারণে আমি ভেবেছিলাম এটি ব্যবহার করা উপযুক্ত হবে না (অবাক করা ভাল নয়!)। যাইহোক, আমি নিজেকে সাহায্য করতে পারি না। আমি এখনও এ সম্পর্কে নিশ্চিত নই; তবে এটি এতই সংক্ষিপ্ত যে আপনাকে মন্তব্য করার মত মন্তব্য থাকলে এখানে কাজ করা সহজ।
13ren 7

6
@ 13ren: আপনার এবং চাচা ববকে কোড সম্পর্কে একটি কথা বলা দরকার যা "চালাক এবং অবাক"।
স্টিফান কেন্ডাল

আমার মনে হচ্ছে আমি জেনে বছরগুলি নষ্ট করেছি ^^;
হ্রদ

জাভা কেন এই ধরনের কাজটিকে একটি কুৎসিত কোডে পরিণত করতে হবে?
এডুয়ার্ডো

82
org.apache.commons.lang3.StringUtils.join(list,",");

1
উত্সটি খুঁজে পেয়েছে : svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/… যোগদান পদ্ধতিতে 9 ওভারলোডিং রয়েছে। পুনরাবৃত্তি-ভিত্তিকগুলি "নমুনা সমাধান 3" এর মতো; সূচক-ভিত্তিকগুলি ব্যবহার করে: যদি (i> স্টার্টইন্ডেক্স) {<বিভাজক যুক্ত করুন>}
13 ই

আমি যদিও বাস্তবায়নের পরে আছি। এটি কোনও ফাংশনে মুড়িয়ে ফেলা ভাল ধারণা, তবে বাস্তবে, আমার ডিলিমিটারটি কখনও কখনও একটি নতুন লাইন হয় এবং প্রতিটি লাইনটি নির্দিষ্ট নির্দিষ্ট গভীরতায়ও যুক্ত থাকে। যতক্ষণ না ... যোগদান (তালিকা, "\ n" + ইনডেন্ট) ... তা কি সর্বদা কার্যকর হবে? দুঃখিত, শুধু জোরে চিন্তা করছি।
13ren

2
আমার মতে, এটি সবচেয়ে সুন্দর এবং সংক্ষিপ্ততম সমাধান
জেস্পার রন-জেনসেন

সম্ভবত, list.iterator ()?
ভানুয়ান

32

জাভা 8 এটি করার জন্য কয়েকটি নতুন উপায় সরবরাহ করে:

  • joinউপর পদ্ধতি String
  • একজন joiningথেকে স্ট্রিম জন্য সংগ্রাহক Collectorsবর্গ।
  • StringJoinerবর্গ।

উদাহরণ:

// Util method for strings and other char sequences
List<String> strs = Arrays.asList("1", "2", "3");
String listStr1 = String.join(",", strs);

// For any type using streams and collectors
List<Object> objs = Arrays.asList(1, 2, 3);
String listStr2 = objs.stream()
    .map(Object::toString)
    .collect(joining(",", "[", "]"));

// Using the new StringJoiner class
StringJoiner joiner = new StringJoiner(", ", "[", "]");
joiner.setEmptyValue("<empty>");
for (Integer i : objs) {
  joiner.add(i.toString());
}
String listStr3 = joiner.toString();

স্ট্রিম ব্যবহার করে পদ্ধতির ধারণা করা হয় import static java.util.stream.Collectors.joining;


এটি আইএমএইচও, আপনি যদি জাভা 8 ব্যবহার করেন তবে সেরা উত্তর।
স্ক্র্যাভি


7

আপনি যদি স্প্রিং ফ্রেমওয়ার্ক ব্যবহার করেন তবে স্ট্রিং ইউটিলেস দিয়ে এটি করতে পারেন :

public static String arrayToDelimitedString(Object[] arr)
public static String arrayToDelimitedString(Object[] arr, String delim)
public static String collectionToCommaDelimitedString(Collection coll)
public static String collectionToCommaDelimitedString(Collection coll, String delim)

ধন্যবাদ, তবে কীভাবে এটি বাস্তবায়িত হয়?
13ren 23

6

জাভার তালিকা টু স্ট্রিং বাস্তবায়নের ভিত্তিতে:

Iterator i = list.iterator();
for (;;) {
  sb.append(i.next());
  if (! i.hasNext()) break;
  ab.append(", ");
}

এটি এর মতো ব্যাকরণ ব্যবহার করে:

List --> (Item , )* Item

প্রথম ভিত্তিকের পরিবর্তে সর্বশেষ-ভিত্তিক হয়ে, তালিকার শেষের তালিকার জন্য এটি একই পরীক্ষার সাথে স্কিপ-কমা পরীক্ষা করতে পারে। আমি মনে করি এটি খুব মার্জিত, তবে আমি স্পষ্টতা সম্পর্কে নিশ্চিত নই।




3
for(int i=0, length=list.size(); i<length; i++)
  result+=(i==0?"":", ") + list.get(i);

হ্যাঁ এটি কিছুটা রহস্যজনক তবে ইতিমধ্যে যা পোস্ট করা হয়েছে তার বিকল্প to
চেরোভিম

1
আমি মনে করি কোডটি দুর্দান্ত দেখায়, এটি আপনার অন্যান্য উত্তর এবং এর খুব কমই 'ক্রিপ্টিক' এর চেয়েও সুন্দর IM এটিকে জোড় নামক পদ্ধতিতে এবং আপনার হাস্যোজ্জ্বলকে আবদ্ধ করুন, তবুও আমি আশা করব যে ভাষাটি আসলেই একটি সাধারণ সমস্যা যা সমাধান করার একটি আরও ভাল উপায় রয়েছে।
টার্ন

@ টার্ন: আপনি মনে করেন এটি দেখতে ভাল লাগছে কারণ আপনার একটি পাইথন / পার্ল পটভূমি রয়েছে;) আমি এটিও পছন্দ করি
চেরুভিম

3

ফোরচ লুপের জন্য একটি বিকল্প হ'ল:

StringBuilder sb = new StringBuilder();
for(String s:list){
  if (sb.length()>0) sb.append(",");
  sb.append(s);
}

2
StringBuffer result = new StringBuffer();
for(Iterator it=list.iterator; it.hasNext(); ) {
  if (result.length()>0)
    result.append(", ");
  result.append(it.next());
}

আপডেট : ডেভ ওয়েব মন্তব্যে উল্লিখিত হিসাবে তালিকার প্রথম আইটেমটি খালি স্ট্রিং থাকলে এটি সঠিক ফলাফল নাও দিতে পারে।


মেহ .. এখনও লুপ আছে।
sfossen

আপনি এটি ফোরচ লুপটি সংক্ষিপ্ত করতে ব্যবহার করতে পারেন।
পিটার লরে

তালিকার প্রথম আইটেমটি খালি স্ট্রিং হলে এটি কাজ করবে না।
ডেভ ওয়েব

@ ডেভ ওয়েব: হ্যাঁ, ধন্যবাদ যদিও প্রশ্নের তেমন কোনও প্রয়োজন নেই।
চেরোভিম

@ চেরোভিয়াম: প্রশ্নটি বলে না যে আইটেমগুলির মধ্যে কোনওটিই ফাঁকা স্ট্রিং হবে না সুতরাং এটির অন্তর্নিহিত প্রয়োজন। যদি আপনি কোনও সিএসভি ফাইল তৈরি করেন তবে খালি ক্ষেত্রগুলি বেশ সাধারণ হতে পারে।
ডেভ ওয়েব

2

আমি সাধারণত এটি করি:

StringBuffer sb = new StringBuffer();
Iterator it = myList.iterator();
if (it.hasNext()) { sb.append(it.next().toString()); }
while (it.hasNext()) { sb.append(",").append(it.next().toString()); }

যদিও আমি মনে করি জাভা বাস্তবায়ন অনুযায়ী আমি এখন থেকে এই চেক করব;)


এটি নমুনা 3 হিসাবে একই যুক্তি, আমি এটি পছন্দ করি কারণ এটি অপ্রয়োজনীয় কিছু করে না। তবে, আমি জানি না এটি পরিষ্কার if বিটিডাব্লু: তালিকাটি খালি থাকাকালীন দুটি পরীক্ষা এড়িয়ে আপনি যদি ভিতরে কিছুক্ষণ রেখে দেন তবে এটি আরও দক্ষ। এটি আমার কাছে এটি আরও স্বচ্ছভাবে পরিষ্কার করে তোলে।
13ren

স্বর্গের জন্য, একটি স্ট্রিংবিল্ডার
স্ক্র্যাভি

2

যদি আপনি গ্রোভি ব্যবহার করতে পারেন (যা জেভিএম চলমান):

def list = ['a', 'b', 'c', 'd']
println list.join(',')

ধন্যবাদ, তবে আমি বাস্তবায়নে আগ্রহী। এটি কীভাবে বাস্তবায়ন করা হয়?
13ren 23

2

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

সম্পাদনা করুন : আসল সমাধানটি সঠিক, তবে মন্তব্য অনুসারে অপ-অনুকূল নয়। দ্বিতীয়বার চেষ্টা করা হচ্ছে:

int[] array = {1, 2, 3};
StringBuilder builder = new StringBuilder();
for (int i = 0 ;  i < array.length; i++)
       builder.append(i == 0 ? "" : ",").append(array[i]);

আপনি অ্যারে এবং স্ট্রিংবিল্ডার ঘোষণা সহ কোডের 4 টি লাইনে যান।

২ য় সম্পাদনা : আপনি যদি একজন আইট্রেটারের সাথে ডিল করছেন:

    List<Integer> list = Arrays.asList(1, 2, 3);
    StringBuilder builder = new StringBuilder();
    for (Iterator it = list.iterator(); it.hasNext();)
        builder.append(it.next()).append(it.hasNext() ? "," : "");

এটি এবং উপরের স্ট্যাকওভারফ্লো . com/ প্রশ্নগুলি / 686895৮৫২ / … একই রকম। এটি সংক্ষিপ্ত এবং স্পষ্ট, তবে আপনার যদি কেবল পুনরুক্তিকারী থাকে তবে আপনাকে প্রথমে রূপান্তর করতে হবে। অপ্রতুল, তবে এই পদ্ধতির স্পষ্টতার জন্য এটি মূল্যবান হতে পারে?
13ren 23

উঘ, স্ট্রিং কনটেন্টেশন একটি স্ট্রিংবিল্ডারের ব্যবহারের মধ্যে একটি অস্থায়ী স্ট্রিংবিল্ডার তৈরি করে। অদক্ষ। জাভা-র আরও ভাল পছন্দ, তবে চলমান কোডের উন্নতি) "যদি (i> 0) {builder.append (','); followed" এর পরে builder.append (অ্যারে [i]) হবে;
এডি

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

2 য় প্রদত্ত, আশা করি আরও ভাল সমাধান।
জুলিয়ান চস্তং

এগুলি বিভক্ত করা আরও ভাল (যাতে লোকেরা এক বা অন্যকে ভোট দিতে পারে)।
13ren

1

আমি সাধারণত সংস্করণ 3 এর অনুরূপ কিছু ব্যবহার করি এটি সি / সি ++ / বাশ / ... ভালভাবে কাজ করে P


1

আমি এটি সংকলন করি নি ... তবে কাজ করা উচিত (বা কাজের সাথে ঘনিষ্ঠ হওয়া)।

public static <T> String toString(final List<T> list, 
                                  final String delim)
{
    final StringBuilder builder;

    builder = new StringBuilder();

    for(final T item : list)
    {
        builder.append(item);
        builder.append(delim);
    }

    // kill the last delim
    builder.setLength(builder.length() - delim.length());

    return (builder.toString());
}

আমি এইভাবে পছন্দ করি, আমি কেবল অন্য একটি ফর্ম্যাটিং পছন্দ করি। তবে একটি ছোট ফিক্স উল্লেখ করার জন্য: তালিকাটি খালি থাকলে, এটি একটি সূচকআউটঅফবাউন্ড ব্যতিক্রম ছুঁড়ে দেবে। সুতরাং, হয় সেটলেন্থের আগে একটি চেক করুন, বা ম্যাথ.ম্যাক্স (0, ...) ব্যবহার করুন
tb-

1

এটি খুব সংক্ষিপ্ত, খুব স্পষ্ট, তবে আমার সংবেদনশীলতাগুলি ভীষণ ভয়ঙ্করতা দেয়। এটি বিভিন্ন ডিলিমিটরের সাথে খাপ খাইয়ে নেওয়া কিছুটা বিশ্রীও, বিশেষত স্ট্রিং (চর নয়)।

for (Item i : list)
  sb.append(',').append(i);
if (sb.charAt(0)==',') sb.deleteCharAt(0);

দ্বারা অনুপ্রাণিত: জাভা লুপ জন্য বর্ধিত শেষ পুনরাবৃত্তি


1
StringBuffer sb = new StringBuffer();

for (int i = 0; i < myList.size(); i++)
{ 
    if (i > 0) 
    {
        sb.append(", ");
    }

    sb.append(myList.get(i)); 
}

আমি এটিকে স্ট্যাটিক ইউটিলিটি ক্লাসে এম্বেড করা খুব সহজ বলে মনে করি, পাশাপাশি পড়া এবং বোঝার পক্ষে খুব সহজ। এটির তালিকাগুলি, লুপ এবং ডিলিমিটার ছাড়াও কোনও অতিরিক্ত ভেরিয়েবল বা রাজ্যের প্রয়োজন নেই।
জোচিম এইচ। স্কি

এটি এমন কিছু সরবরাহ করবে:Item1Item2, Item3, Item4,

স্বর্গের জন্য, একটি স্ট্রিংবিল্ডার
স্ক্র্যাভি

1

আমি এই পদ্ধতির কিছুটা পছন্দ করি যা আমি কিছুক্ষণ আগে একটি ব্লগে পেয়েছিলাম। দুর্ভাগ্যক্রমে আমি ব্লগের নাম / ইউআরএল মনে রাখি না।

আপনি দেখতে এমন কোনও ইউটিলিটি / সহায়ক শ্রেণি তৈরি করতে পারেন:

private class Delimiter
{
    private final String delimiter;
    private boolean first = true;

    public Delimiter(String delimiter)
    {
        this.delimiter = delimiter;
    }

    @Override
    public String toString()
    {
        if (first) {
            first = false;
            return "";
        }

        return delimiter;
    }
}

সহায়ক শ্রেণিটি ব্যবহার করা সহজ এটি:

StringBuilder sb = new StringBuilder();
Delimiter delimiter = new Delimiter(", ");

for (String item : list) {
    sb.append(delimiter);
    sb.append(item);
}

কেবল একটি নোট: এটি "ডিলিমিটার" হওয়া উচিত, "ডিলিমিটার" নয়।
মাইকেল মায়ার্স

1

আপনার ডিলিমিটারটি "," হওয়ায় আপনি নীচের যে কোনওটি ব্যবহার করতে পারেন:

public class StringDelim {

    public static void removeBrackets(String string) {
        System.out.println(string.substring(1, string.length() - 1));
    }

    public static void main(String... args) {
        // Array.toString() example
        String [] arr = {"Hi" , "My", "name", "is", "br3nt"};
        String string = Arrays.toString(arr);
        removeBrackets(string);

        // List#toString() example
        List<String> list = new ArrayList<String>();
        list.add("Hi");
        list.add("My");
        list.add("name");
        list.add("is");
        list.add("br3nt");
        string = list.toString();
        removeBrackets(string);

        // Map#values().toString() example
        Map<String, String> map = new LinkedHashMap<String, String>();
        map.put("1", "Hi");
        map.put("2", "My");
        map.put("3", "name");
        map.put("4", "is");
        map.put("5", "br3nt");
        System.out.println(map.values().toString());
        removeBrackets(string);

        // Enum#toString() example
        EnumSet<Days> set = EnumSet.allOf(Days.class);
        string = set.toString();
        removeBrackets(string);
    }

    public enum Days {
        MON("Monday"),
        TUE("Tuesday"),
        WED("Wednesday"),
        THU("Thursday"),
        FRI("Friday"),
        SAT("Saturday"),
        SUN("Sunday");

        private final String day;

        Days(String day) {this.day = day;}
        public String toString() {return this.day;}
    }
}

যদি আপনার ডিলিমিটার অন্য কিছু হয় তবে এটি আপনার পক্ষে কাজ করে না।


1

আমি এই সমাধানটি পছন্দ করি:

String delim = " - ", string = "";

for (String item : myCollection)
    string += delim + item;

string = string.substring(delim.length());

আমি ধরে নিয়েছি এটি স্ট্রিংবিল্ডারও ব্যবহার করতে পারে।


1

আমার মতে, এটি পড়ার এবং বোঝার পক্ষে সবচেয়ে সহজ:

StringBuilder sb = new StringBuilder();
for(String string : strings) {
    sb.append(string).append(',');
}
sb.setLength(sb.length() - 1);
String result = sb.toString();

0

পাইথনে এটি সহজ

"," যোগ দিন (আপনার তালিকাভুক্ত)

সি # তে স্ট্রিং ক্লাসে একটি স্ট্যাটিক পদ্ধতি রয়েছে

স্ট্রিং.জয়াইন (",", আপনার তালিকাভুক্তি)

দুঃখিত, জাভা সম্পর্কে নিশ্চিত নন তবে আপনি ভেবেছিলেন যে আমি অন্যান্য ভাষা সম্পর্কে জিজ্ঞাসা করেছি। আমি নিশ্চিত জাভাতেও তেমন কিছু থাকবে।


আইআইআরসি, আপনি। নেট সংস্করণে একটি পিছনে পাবেন। :-(

1
সদ্য পরীক্ষা করা হয়েছে। নেট বা পাইথনে কোনও পিছনে ডিলিমিটার নেই
21:25

1
ধন্যবাদ! আমি এর উত্সটি পেয়েছি: svn.python.org/view/python/branches/release22-branch/Objects/… "সমস্ত কিছু" কেটেনেটের জন্য অনুসন্ধান করুন। এটি শেষ আইটেমটির জন্য পৃথককে বাদ দেয়।
13ren

@ 13ren সুন্দরভাবে সম্পন্ন! এটি সাহায্য করে? আমার একটি লক ছিল এবং তাড়াতাড়ি মনে পড়ে গেল কেন আমি এই দিনগুলিতে সি তে প্রোগ্রাম না করা বেছে নিই: পি
টার্ন

@ তরত্ন, হ্যাঁ, এটি একটি আকর্ষণীয় উদাহরণ কারণ এটি কেবলমাত্র কম্যান যুক্ত করে যদি এটি শেষ আইটেম না হয়: যদি (i <সিক্লেন - 1) {<বিভাজক যুক্ত করুন>}
13ren

0

আপনি নিঃশর্তভাবে ডিলিমিটার স্ট্রিংটি যুক্ত করতে পারেন এবং লুপের পরে শেষে অতিরিক্ত ডিলিমিটারটি সরিয়ে ফেলুন। তারপরে শুরুতে "যদি তালিকাটি খালি থাকে তবে এই স্ট্রিংটি ফিরিয়ে দিন" শেষে আপনাকে চেক এড়াতে দেয় (যেমন আপনি খালি তালিকা থেকে অক্ষরগুলি সরাতে পারবেন না)

সুতরাং প্রশ্নটি আসলে:

"একটি লুপ এবং একটি দেওয়া আছে, আপনি কী মনে করেন এগুলি একসাথে রাখার সবচেয়ে পরিষ্কার উপায়?"


0
public static String join (List<String> list, String separator) {
  String listToString = "";

  if (list == null || list.isEmpty()) {
   return listToString;
  }

  for (String element : list) {
   listToString += element + separator;
  }

  listToString = listToString.substring(0, separator.length());

  return listToString;
}

1
আমি মনে করি আপনি বলতে চেয়েছিলেনlistToString.substring(0, listToString.length()-separator.length());
13েন

0
if (array.length>0)          // edited in response Joachim's comment
  sb.append(array[i]);
for (int i=1; i<array.length; i++)
  sb.append(",").append(array[i]);

একটি তালিকা (জাভা) কমা-বিস্মৃত করার স্বচ্ছ উপায়ের উপর ভিত্তি করে ?

এই ধারণাটি ব্যবহার করে: একটি লুপের শেষ উপাদানটি কী আলাদা চিকিত্সার দাবি করে?


1
এটি কাজ করার জন্য, আপনাকে জানতে হবে যে তালিকায় কমপক্ষে 1 টি উপাদান রয়েছে, অন্যথায় আপনার প্রথম লুপটি ইনডেক্সআউট অফফাউন্ডস এক্সসেপশন দিয়ে ক্র্যাশ হবে।
জোচিম এইচ। স্কি

@ জোয়াচিম ধন্যবাদ, আপনি অবশ্যই আছেন কী কুৎসিত সমাধান আমি লিখেছি! আমি পরিবর্তন করব for (int i=0; i<1; i++)করার if (array.length>0)
13ren

0
public String toString(List<Item> items)
{
    StringBuilder sb = new StringBuilder("[");

    for (Item item : items)
    {
        sb.append(item).append(", ");
    }

    if (sb.length() >= 2)
    {
        //looks cleaner in C# sb.Length -= 2;
        sb.setLength(sb.length() - 2);
    }

    sb.append("]");

    return sb.toString();
}

1
শুধু খেয়াল এটা উত্তর অনুরূপ TofuBeer দিলেন
Eblis

0

উত্তরের কোনও উত্তর এখনও পর্যন্ত পুনরাবৃত্তি ব্যবহার করে না ...

public class Main {

    public static String toString(List<String> list, char d) {
        int n = list.size();
        if(n==0) return "";
        return n > 1 ? Main.toString(list.subList(0, n - 1), d) + d
                  + list.get(n - 1) : list.get(0);
    }

    public static void main(String[] args) {
        List<String> list = Arrays.asList(new String[]{"1","2","3"});
        System.out.println(Main.toString(list, ','));
    }

}

0
private String betweenComma(ArrayList<String> strings) {
    String united = "";
    for (String string : strings) {
        united = united + "," + string;
    }
    return united.replaceFirst(",", "");
}

-1

পদ্ধতি

String join(List<Object> collection, String delimiter){
    StringBuilder stringBuilder = new StringBuilder();
    int size = collection.size();
    for (Object value : collection) {
        size --;
        if(size > 0){
            stringBuilder.append(value).append(delimiter);
        }
    }

    return stringBuilder.toString();
}

ব্যবহার

[1,2,3] এর অ্যারে দেওয়া হয়েছে

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