স্ট্রিংয়ের অ্যারেটিকে জাভাতে স্ট্রিংয়ে রূপান্তর করুন


242

আমি স্ট্রিংগুলির অ্যারেগুলিকে স্ট্রিংয়ে রূপান্তর করার জন্য জাভা কোড চাই।


কী ধরণের অ্যারে? স্ট্রিং অ্যারে?
আদর্শ

2
array.toString()? আরো নির্দিষ্ট করা.
স্ট্যান কুরিলিন

1
@Princeyesuraj, সরকারী উত্তর দ্বারা প্রদান করা হয় adarshr । আপনি যদি নিজের বিভাজক চান, আপনি জোস্লাভের উত্তরটি চেষ্টা করতে পারেন , এবং কোনও থ্রেড সমস্যা না থাকলে আপনি দক্ষতার জন্য স্ট্রিংবুফারের পরিবর্তে স্ট্রিংবুডার ব্যবহার করতে পারেন । ক্রোকের উত্তর ভাল, তবে আমার মতে কিছুটা বেশি চাপ দেওয়া।
দান্তে মে কোড

উত্তর:


470

আপনি যদি কেবল অ্যারের একটি "ডিবাগ-স্টাইল" ডাম্প চান:

String str = Arrays.toString(arr);

বা, আরও নিয়ন্ত্রণের জন্য (জাভা 8 এর আগে):

StringBuilder builder = new StringBuilder();
for(String s : arr) {
    builder.append(s);
}
String str = builder.toString();

(জাভা 8 এবং উপরে):

String str = String.join(",", arr);

এবং যদি আপনি অ্যান্ড্রয়েড কোণ থেকে এসেছেন:

String str = TextUtils.join(",", arr);

আপনি উপরের সংশোধন করতে পারেন উপর নির্ভর করে কোন অক্ষর, যদি কোনও হয়, আপনি স্ট্রিং মধ্যে চান।

আপনি প্রাক জাভা 8 কোডটির সাথে অভিন্ন কোডের কাছাকাছি দেখতে পাচ্ছেন তবে ব্যবহার করছেন StringBuffer- StringBuilderএটি একটি নতুন বর্গ যা থ্রেড-নিরাপদ নয়, তবে একক থ্রেডে আরও ভাল পারফরম্যান্স রয়েছে কারণ এটি বিনা শৃঙ্খলাবদ্ধ সমন্বয়কে ছাড়িয়ে যায়। সংক্ষেপে, আপনি StringBuilder99% ক্ষেত্রে ভাল ব্যবহার করছেন - কার্যকারিতা অনুযায়ী, দুটি একরকম।

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


13
স্ট্রিংবুডার কেন যোগ করার জন্য + = এর চেয়ে উচ্চতর তা নিয়ে ব্যাখ্যা করার জন্য ধন্যবাদ।
নিকোলাস মিলার

5
আপনি কভারের নীচে একটি + = ব্যবহার করলে জাভা এটিকে স্ট্রিংবুডার ব্যবহার করে রূপান্তর করবে।
জাভমান

6
@ মাত্তিও, আপনাকে ব্যবহার করতে হবে Arrays.toString(yourArray);তবে আমার ধারণা আপনি ব্যবহার করেছেনyourArray.toString();
জারাফাতা

5
জাভা যেহেতু আপনিও লুপের পরিবর্তে 1.8ব্যবহার করতে পারেন String::joinString.join("", arr);
জর্ন ভার্নি

2
অ্যান্ড্রয়েড বিকাশকারীরা স্ট্রিং ফলাফলের মতো ব্যবহার করতে পারেন = TextUtils.join (",", তালিকা); stackoverflow.com/questions/33802971/...
রাহুল Hawge

102

অ্যাপাচি কমন্স ব্যবহার করুন StringUtils.join()। এটি একটি অ্যারে লাগে, প্যারামিটার হিসাবে (এবং এর জন্য ওভারলোডও রয়েছে Iterableএবং Iteratorপরামিতি রয়েছে) এবং toString()প্রতিটি উপাদানকে স্ট্রিং প্রতিনিধিত্ব করতে প্রতিটি উপাদানকে (যদি এটি নাল না হয়) কল করে। প্রতিটি উপাদানের স্ট্রিং প্রতিনিধিত্ব করে তারপরে একটি বিভাজকের সাথে একটি স্ট্রিংয়ের সাথে যুক্ত করা হয় যদি একটি নির্দিষ্ট করা থাকে:

String joinedString = StringUtils.join(new Object[]{"a", "b", 1}, "-");
System.out.println(joinedString);

উত্পাদন:

a-b-1

1
মাইনর ফিক্স: joinString = StringUtils.join (নতুন অবজেক্ট [] {"ক", "বি", "1"}, "-");
কোয়েস্টবার্ন

35

আমি এর জন্য গুগলের পেয়ারা যোগদানকারী ব্যবহার করতে পছন্দ করি , যেমন:

Joiner.on(", ").skipNulls().join("Harry", null, "Ron", "Hermione");

একই স্ট্রিং উত্পাদন করবে:

new String("Harry, Ron, Hermione");

ইটিএ: জাভা 8 এর এখন একই ধরণের সমর্থন রয়েছে:

String.join(", ", "Harry", "Ron", "Hermione");

নাল মানগুলি এড়িয়ে যাওয়ার জন্য সমর্থন দেখতে পাচ্ছে না তবে এটি সহজেই কাজ করে।


10
তবে আমরা যদি ষড়যন্ত্রের সাথে সত্য হয়ে থাকি, nullতবে "" যার নাম অবশ্যই উল্লেখ করা উচিত নয় ":-)
স্টিফেন সি

22
আপনি যদি সাহসী হন: ;-)Joiner.on(", ").useForNull("Voldemort").join("Harry", null, "Ron", "Hermione");
সমৃদ্ধ

জাভা -8String.join(", ", "Harry", null, "Ron", "Hermione").replaceAll("null", "Voldermart");
সিজো

13

আপনি এটি করতে পারেন, aআদিম ধরণের অ্যারে দেওয়া :

StringBuffer result = new StringBuffer();
for (int i = 0; i < a.length; i++) {
   result.append( a[i] );
   //result.append( optional separator );
}
String mynewstring = result.toString();

23
স্ট্রিংবুফার পুরানো, তার পরিবর্তে স্ট্রিংবিল্ডার ব্যবহার করুন যার এক থ্রেডে ব্যবহারের জন্য অপ্রয়োজনীয় সিঙ্ক্রোনাইজেশন নেই।
জেসন এস

13

জাভা 8 থেকে, আমার মনে হয় সবচেয়ে সহজ উপায়:

    String[] array = { "cat", "mouse" };
    String delimiter = "";
    String result = String.join(delimiter, array);

এইভাবে আপনি একটি স্বেচ্ছাসেবী সীমানা চয়ন করতে পারেন।


10

ব্যবহার করে দেখুন Arrays.deepToString পদ্ধতি।

নির্দিষ্ট অ্যারের "গভীর সামগ্রী" এর একটি স্ট্রিং প্রতিনিধিত্ব করে। যদি অ্যারেতে উপাদান হিসাবে অন্যান্য অ্যারে থাকে তবে স্ট্রিং উপস্থাপনায় তাদের বিষয়বস্তু এবং এগুলি থাকে। এই পদ্ধতিটি বহুমাত্রিক অ্যারেগুলিকে স্ট্রিংয়ে রূপান্তর করার জন্য ডিজাইন করা হয়েছে


আপনার যদি খুব বেশি নিয়ন্ত্রণের প্রয়োজন না হয় তবে আমি বিশ্বাস করি এটি একটি সহজ সমাধান কারণ আপনার কোনও তৃতীয় পক্ষের লাইব প্রয়োজন নেই। এখানে একটি উদাহরণ রয়েছে: System.out.println (অ্যারেস.দীপটিস্ট্রো (আরগস));
Neves

7

ব্যবহার করে দেখুন Arrays.toString ওভারলোড পদ্ধতি।

অন্যথায়, জেনেরিক প্রয়োগের নীচে এটি ব্যবহার করে দেখুন:

public static void main(String... args) throws Exception {

    String[] array = {"ABC", "XYZ", "PQR"};

    System.out.println(new Test().join(array, ", "));
}

public <T> String join(T[] array, String cement) {
    StringBuilder builder = new StringBuilder();

    if(array == null || array.length == 0) {
        return null;
    }

    for (T t : array) {
        builder.append(t).append(cement);
    }

    builder.delete(builder.length() - cement.length(), builder.length());

    return builder.toString();
}

তারপরে আপনি যে ফর্ম্যাটটি সন্ধান করছেন তা আমাদের জানান। অন্যথায়, আপনার মনে কী আছে তা আমরা অনুমান করতে পারি না।
জেসন এস

3

নীচে অ্যারে থেকে স্ট্রিং রূপান্তর উদাহরণ is

    পাবলিক ক্লাস অ্যারেটোস্ট্রিং
    {
পাবলিক স্ট্যাটিক শূন্য মূল (স্ট্রিং [] আরগস) { স্ট্রিং [] স্ট্রআরে = নতুন স্ট্রিং [] Java "জাভা", "পিএইচপি", "। নেট", "পার্ল", "সি", "কোবল"};

        String newString = Arrays.toString(strArray);

        newString = newString.substring(1, newString.length()-1);

        System.out.println("New New String: " + newString);
    }
}


1
String[] strings = new String[25000];
for (int i = 0; i < 25000; i++) strings[i] = '1234567';

String result;
result = "";
for (String s : strings) result += s;
//linear +: 5s

result = "";
for (String s : strings) result = result.concat(s);
//linear .concat: 2.5s

result = String.join("", strings);
//Java 8 .join: 3ms

Public String join(String delimiter, String[] s)
{
    int ls = s.length;
    switch (ls)
    {
        case 0: return "";
        case 1: return s[0];
        case 2: return s[0].concat(delimiter).concat(s[1]);
        default:
            int l1 = ls / 2;
            String[] s1 = Arrays.copyOfRange(s, 0, l1); 
            String[] s2 = Arrays.copyOfRange(s, l1, ls); 
            return join(delimiter, s1).concat(delimiter).concat(join(delimiter, s2));
    }
}
result = join("", strings);
// Divide&Conquer join: 7ms

আপনার কাছে যদি চয়েজ না থাকে তবে জাভা 6 বা 7 ব্যবহার করতে হয় তবে আপনার ডিভাইড এবং কনকয়ের জয়েনটি ব্যবহার করা উচিত।


0

আপনি কোড চান যা অ্যারেলিস্ট থেকে স্ট্রিং উত্পাদন করে,

Iterate through all elements in list and add it to your String result

আপনি এটি 2 উপায়ে করতে পারেন: ফলাফল হিসাবে স্ট্রিং বা স্ট্রিংবফার / স্ট্রিংবুডারকে ব্যবহার করে।

উদাহরণ:

String result = "";
for (String s : list) {
    result += s;
}

... তবে পারফরম্যান্সের কারণে এটি ভাল অনুশীলন নয়। স্ট্রিংবুফার (থ্রেডগুলি নিরাপদ) বা স্ট্রিংবুডার ব্যবহার করা ভাল যা স্ট্রিংগুলি যুক্ত করার পক্ষে আরও উপযুক্ত



-1
String array[]={"one","two"};
String s="";

for(int i=0;i<array.length;i++)
{
  s=s+array[i];
}

System.out.print(s);

1
আপনার উত্তরটি মূলত সমাসের মতো; আরও কিছুটা জটিল; সুতরাং নিশ্চিত "সবচেয়ে সহজ" এক না। এবং তদ্ব্যতীত, অ্যারে ডটস স্ট্রিং () আরও সহজ।
ঘোস্টটিক

-22

অ্যারেতে কতগুলি উপাদান রয়েছে তা আপনি যদি জানেন তবে একটি সহজ উপায় এটি করছেন:

String appendedString = "" + array[0] + "" + array[1] + "" + array[2] + "" + array[3]; 

10
এটি বাস্তব বিশ্বে খুব কমই প্রযোজ্য এবং কিছু খারাপ প্রোগ্রামিং অনুশীলন দেখায়।
Jk1

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