জাভা অ্যারে মুদ্রণের সহজ উপায় কী?


1942

জাভাতে, অ্যারেগুলি ওভাররাইড হয় না toString(), সুতরাং আপনি যদি সরাসরি কোনও মুদ্রণ করার চেষ্টা করেন তবে আপনি classNameঅ্যারে'র 'হেক্সস পাবেন hashCode, সংজ্ঞায়িত অনুযায়ী Object.toString():

int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.println(intArray);     // prints something like '[I@3343c8b3'

তবে সাধারণত, আমরা আসলে আরও কিছু চাই [1, 2, 3, 4, 5]। এটি করার সহজ উপায় কী? এখানে ইনপুট এবং আউটপুটগুলির কয়েকটি উদাহরণ দেওয়া হল:

// Array of primitives:
int[] intArray = new int[] {1, 2, 3, 4, 5};
//output: [1, 2, 3, 4, 5]

// Array of object references:
String[] strArray = new String[] {"John", "Mary", "Bob"};
//output: [John, Mary, Bob]

8
স্ট্রিং ব্যতীত অন্য অবজেক্টের জন্য উপস্থাপনাটি আপনি কী চান? টু স্ট্রিংয়ের ফলাফল? উদ্ধৃতিতে নাকি?
জন স্কিটি

3
হ্যাঁ অবজেক্টগুলি তাদের টস্ট্রিং () পদ্ধতি এবং কোট ছাড়াই উপস্থাপন করা হবে (কেবলমাত্র উদাহরণটি আউটপুট সম্পাদনা করেছে)।
অ্যালেক্স স্পার্লিং 3'09

2
বাস্তবে, ঘনিষ্ঠভাবে এর সাথে সম্পর্কিত stackoverflow.com/questions/29140402/...
Raedwald

1
অদ্ভুত আউটপুট অগত্যা মেমরি অবস্থান নয়। এটি hashCode()হেক্সাডেসিমাল। দেখুন Object#toString()
ক্যাসেল

1
Java8 চেক একক মাত্রিক বা বহু মাত্রিক অ্যারে মুদ্রণ করতে stackoverflow.com/questions/409784/...
akhil_mittal

উত্তর:


2599

জাভা 5 যেহেতু আপনি অ্যারে Arrays.toString(arr)বা Arrays.deepToString(arr)অ্যারে ব্যবহার করতে পারেন । নোট করুন যে Object[]সংস্করণ .toString()অ্যারেতে প্রতিটি বস্তুর উপর কল করে। আপনি যেভাবে জিজ্ঞাসা করছেন ঠিক সেভাবে আউটপুটটিও সজ্জিত।

উদাহরণ:

  • সাধারণ অ্যারে:

    String[] array = new String[] {"John", "Mary", "Bob"};
    System.out.println(Arrays.toString(array));

    আউটপুট:

    [John, Mary, Bob]
  • নেস্টেড অ্যারে:

    String[][] deepArray = new String[][] {{"John", "Mary"}, {"Alice", "Bob"}};
    System.out.println(Arrays.toString(deepArray));
    //output: [[Ljava.lang.String;@106d69c, [Ljava.lang.String;@52e922]
    System.out.println(Arrays.deepToString(deepArray));

    আউটপুট:

    [[John, Mary], [Alice, Bob]]
  • double এরে:

    double[] doubleArray = { 7.0, 9.0, 5.0, 1.0, 3.0 };
    System.out.println(Arrays.toString(doubleArray));

    আউটপুট:

    [7.0, 9.0, 5.0, 1.0, 3.0 ]
  • int এরে:

    int[] intArray = { 7, 9, 5, 1, 3 };
    System.out.println(Arrays.toString(intArray));

    আউটপুট:

    [7, 9, 5, 1, 3 ]

3
যদি আমাদের কাছে স্ট্রিংগুলির একটি অ্যারে থাকে এবং আমরা সরল আউটপুট চাই; লাইক String[] array = {"John", "Mahta", "Sara"}:, এবং আমরা বন্ধনী এবং কমা ছাড়া এই আউটপুটটি চাই : John Mahta Sara?
হেনগামেহ

3
@ হেনগামেহ: এটি করার আরও বেশ কয়েকটি উপায় রয়েছে তবে আমার প্রিয়টি হ'ল জাভাহটচকলেট / নোটস / জাভা এইচটিএমএল#arrays-tostring
রাশ ব্যাটম্যান

5
এফওয়াইআই, Arrays.deepToString()কেবলমাত্র একটি Object [](বা প্রসারিত ক্লাসগুলির একটি অ্যারে গ্রহণ করে Object, যেমন Integerএটি প্রকারের আদিম অ্যারেতে কাজ করে না int []But তবে Arrays.toString(<int array>)আদিম অ্যারেগুলির জন্য সূক্ষ্ম কাজ করে
মারকাস

4
@ হেনগামেহকে উত্সর্গীকৃত একটি পদ্ধতি রয়েছে। System.out.println(String.join(" ", new String[]{"John", "Mahta", "Sara"}))মুদ্রণ করবে John Mahta Sara
ব্যবহারকারী 8397947

2
@dorukayhan বাস্তবিক আপনি স্পষ্টভাবে এখানে অ্যারে শুরু করতে গিয়ে বাদ পারেন: String.join(" ", "John", "Mahta", "Sara")জন্য .join(...)পদ্ধতি হিসেবে অ্যারে লাগে vararg প্যারামিটার।
আমাদান

354

সর্বদা প্রথমে স্ট্যান্ডার্ড লাইব্রেরি পরীক্ষা করুন।

import java.util.Arrays;

তারপরে চেষ্টা করুন:

System.out.println(Arrays.toString(array));

বা যদি আপনার অ্যারেতে উপাদান হিসাবে অন্যান্য অ্যারে থাকে:

System.out.println(Arrays.deepToString(array));

যদি আমাদের কাছে স্ট্রিংগুলির একটি অ্যারে থাকে এবং আমরা সরল আউটপুট চাই; লাইক String[] array = {"John", "Mahta", "Sara"}:, এবং আমরা বন্ধনী এবং কমা ছাড়া এই আউটপুটটি চাই : John Mahta Sara?
হেনগামেহ

1
@ হেনগামেহ কেবল অ্যারে ডটল স্ট্রিং (অ্যারে) একটি স্ট্রিং ভেরিয়েবলের মধ্যে সঞ্চয় করুন এবং তারপরে জাভাটির পদ্ধতি পরিবর্তনের মাধ্যমে ব্রেসগুলি সরিয়ে ফেলুন
নাভিদ আহমেদ

12
@ হেনগামেহ আজকাল জাভা 8: এর সাথে String.join(" ", Arrays.asList(array))ডক
জাস্টিন

106

এটি জেনে রাখা ভাল, তবে "সর্বদা প্রথমে স্ট্যান্ডার্ড লাইব্রেরিগুলি পরীক্ষা করুন" আমি কৌতুকের উপর কখনই হোঁচট খেতাম না Arrays.toString( myarray )

- তবে আমি কীভাবে এটি করব তা দেখার জন্য আমি মায়ারির ধরণটিতে মনোনিবেশ করছিলাম। আমি এই জিনিসটির মধ্য দিয়ে পুনরাবৃত্তি করতে চাইনি: আমি একটি সহজ কলটি চাইছিলাম এটি এলোকেস ডিবাগার এবং myarray.toString () এ যা দেখছে তার অনুরূপ প্রকাশ করার জন্য এটি কেবল করছিল না।

import java.util.Arrays;
.
.
.
System.out.println( Arrays.toString( myarray ) );

যদি আমাদের কাছে স্ট্রিংগুলির একটি অ্যারে থাকে এবং আমরা সরল আউটপুট চাই; লাইক String[] array = {"John", "Mahta", "Sara"}:, এবং আমরা বন্ধনী এবং কমা ছাড়া এই আউটপুটটি চাই : John Mahta Sara?
হেনগামেহ

3
@ হেনগামেহ আমি মনে করি এটি অন্য একটি বিষয়। সাধারণ স্ট্রিং অপারেশনগুলির পরে আপনি এই স্ট্রিংটি হেরফের করতে পারেন ... যেমন অ্যারেস.টোস্ট্রিং (মায়ার্রে) .রেপ্স ("[", "(")) এবং এই জাতীয় ...
ওডডেভ

91

JDK1.8 এ আপনি সামগ্রিক ক্রিয়াকলাপ এবং ল্যাম্বডা এক্সপ্রেশন ব্যবহার করতে পারেন:

String[] strArray = new String[] {"John", "Mary", "Bob"};

// #1
Arrays.asList(strArray).stream().forEach(s -> System.out.println(s));

// #2
Stream.of(strArray).forEach(System.out::println);

// #3
Arrays.stream(strArray).forEach(System.out::println);

/* output:
John
Mary
Bob
*/

50
বা কম জটিল,Arrays.stream(strArray).forEach(System.out::println);
অ্যালেক্সিস সি

9
এটি আনাড়ি। এটি হওয়া উচিত System.out::printlnযা জাভা 8 পদ্ধতির রেফারেন্স। আপনার কোড একটি অপ্রয়োজনীয় ল্যাম্বদা উত্পাদন করে।
বোরিস স্পাইডারটি

2
শুধু এড়িয়ে যান Arrays.asListএবং করুনArrays.stream(strArray).forEach(System.out::println)
জাস্টিন

1
@AlexisC। কারণ এটি অ্যারে বাদে অন্যান্য বস্তুর সাথেও ব্যবহার করা যেতে পারে।
ইয়াসিন হাজাজ

1
@ ইয়াসিনহাজাজ দুজনই উদাহরণস্বরূপ যদি আপনি অ্যারে জুড়ে আইডিয়োম্যাটিক পদ্ধতিতে একটি পরিসীমা প্রবাহ রাখতে চান Stream.ofতা করতে হবে .skip(n).limit(m)। বর্তমান রূপায়ণটি এমন কোন এসআইজেড স্ট্রিম ফেরায় না যেখানে Arrays.stream(T[], int, int)আপনি সমান্তরালভাবে ক্রিয়াকলাপ সম্পাদন করতে চাইলে আরও ভাল বিভাজনীয় পারফরম্যান্সের দিকে নিয়ে যায়। এছাড়াও যদি আপনার একটি থাকে তবে আপনি int[]দুর্ঘটনাক্রমে ব্যবহার করতে পারেন Stream.ofযা Stream<int[]>কোনও একক উপাদান সহ একটি ফেরত দেবে , যখন Arrays.streamআপনাকে IntStreamসরাসরি দেবে।
অ্যালেক্সিস সি।

41

জাভা 8 দিয়ে শুরু join()করে, স্ট্রিং ক্লাস দ্বারা বন্ধনী ছাড়াই অ্যারে উপাদানগুলি মুদ্রণ করতে এবং পছন্দসইয়ের একটি ডিলিমিটার দ্বারা পৃথক করে দেওয়া পদ্ধতি (যা নীচে প্রদর্শিত উদাহরণের জন্য স্থানের অক্ষর) দ্বারা পৃথক করা পদ্ধতি ব্যবহার করতে পারে:

String[] greeting = {"Hey", "there", "amigo!"};
String delimiter = " ";
String.join(delimiter, greeting) 

আউটপুট হবে "হেই অ্যামিগো!"।


40

আপনি যদি জাভা ১.৪ ব্যবহার করছেন তবে এর পরিবর্তে আপনি এটি করতে পারেন:

System.out.println(Arrays.asList(array));

(এটি অবশ্যই 1.5++ এ কাজ করে))


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

34

Arrays.toString

প্রত্যুত্তর উত্তর হিসাবে @ এসকো সহ বেশ কয়েকটি দ্বারা সরবরাহিত সমাধানগুলিArrays.toString এবং Arrays.deepToStringপদ্ধতিগুলি ব্যবহার করা সহজভাবে সেরা।

জাভা 8 - স্ট্রিম.কমলেট (যোগদান) (), স্ট্রিম.এফ.এইচ

নীচে আমি প্রস্তাবিত অন্যান্য কয়েকটি পদ্ধতির তালিকাবদ্ধ করার চেষ্টা করলাম, কিছুটা উন্নতি করার চেষ্টা করছি, যার মধ্যে সবচেয়ে উল্লেখযোগ্য সংযোজন Stream.collectঅপারেটরের ব্যবহার, একটি ব্যবহার করে , কী করছে তা অনুকরণ করার জন্য।joining CollectorString.join

int[] ints = new int[] {1, 2, 3, 4, 5};
System.out.println(IntStream.of(ints).mapToObj(Integer::toString).collect(Collectors.joining(", ")));
System.out.println(IntStream.of(ints).boxed().map(Object::toString).collect(Collectors.joining(", ")));
System.out.println(Arrays.toString(ints));

String[] strs = new String[] {"John", "Mary", "Bob"};
System.out.println(Stream.of(strs).collect(Collectors.joining(", ")));
System.out.println(String.join(", ", strs));
System.out.println(Arrays.toString(strs));

DayOfWeek [] days = { FRIDAY, MONDAY, TUESDAY };
System.out.println(Stream.of(days).map(Object::toString).collect(Collectors.joining(", ")));
System.out.println(Arrays.toString(days));

// These options are not the same as each item is printed on a new line:
IntStream.of(ints).forEach(System.out::println);
Stream.of(strs).forEach(System.out::println);
Stream.of(days).forEach(System.out::println);

33

জাভা 8 এর আগে

আমরা Arrays.toString(array)একটি মাত্রিক অ্যারে এবং Arrays.deepToString(array)বহু-মাত্রিক অ্যারে মুদ্রণ করতে ব্যবহার করতে পারি ।

জাভা 8

এখন আমরা বিকল্প আছে না Streamএবং lambdaঅ্যারের মুদ্রণ করতে।

এক মাত্রিক অ্যারে মুদ্রণ:

public static void main(String[] args) {
    int[] intArray = new int[] {1, 2, 3, 4, 5};
    String[] strArray = new String[] {"John", "Mary", "Bob"};

    //Prior to Java 8
    System.out.println(Arrays.toString(intArray));
    System.out.println(Arrays.toString(strArray));

    // In Java 8 we have lambda expressions
    Arrays.stream(intArray).forEach(System.out::println);
    Arrays.stream(strArray).forEach(System.out::println);
}

আউটপুটটি হ'ল:

[1, 2, 3, 4, 5]
[জন, মেরি, বব]
1
2
3
4
5
জন
মেরি
বব

মাল্টি-ডাইমেনশনাল অ্যারে প্রিন্ট করা ঠিক যদি আমরা বহুমাত্রিক অ্যারে প্রিন্ট করতে চাই তবে আমরা এটি ব্যবহার করতে পারি Arrays.deepToString(array):

public static void main(String[] args) {
    int[][] int2DArray = new int[][] { {11, 12}, { 21, 22}, {31, 32, 33} };
    String[][] str2DArray = new String[][]{ {"John", "Bravo"} , {"Mary", "Lee"}, {"Bob", "Johnson"} };

    //Prior to Java 8
    System.out.println(Arrays.deepToString(int2DArray));
    System.out.println(Arrays.deepToString(str2DArray));

    // In Java 8 we have lambda expressions
    Arrays.stream(int2DArray).flatMapToInt(x -> Arrays.stream(x)).forEach(System.out::println);
    Arrays.stream(str2DArray).flatMap(x -> Arrays.stream(x)).forEach(System.out::println);
} 

এখন পর্যবেক্ষণ করার বিষয়টি হ'ল পদ্ধতিটি Arrays.stream(T[]), যা int[]আমাদের ফেরত দেয় Stream<int[]>এবং তারপরে পদ্ধতিটি flatMapToInt()প্রতিটি উপাদানের সরবরাহকৃত ম্যাপিং ফাংশন প্রয়োগ করে উত্পাদিত ম্যাপযুক্ত স্ট্রিমের বিষয়বস্তু সহ প্রবাহের প্রতিটি উপাদানকে ম্যাপ করে।

আউটপুটটি হ'ল:

[[11, 12], [21, 22], [31, 32, 33]]
[[জন, ব্রাভো], [মেরি, লি], [বব, জনসন]]
11
12
21
22
31
32
33
জন
ব্রাভো
মেরি
লি
বব
জনসন


যদি আমাদের কাছে স্ট্রিংগুলির একটি অ্যারে থাকে এবং আমরা সরল আউটপুট চাই; লাইক String[] array = {"John", "Mahta", "Sara"}:, এবং আমরা বন্ধনী এবং কমা ছাড়া এই আউটপুটটি চাই : John Mahta Sara?
হেনগামেহ

28

Arrays.deepToString(arr) শুধুমাত্র একটি লাইনে প্রিন্ট করুন।

int[][] table = new int[2][2];

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

System.out.println(Arrays.deepToString(table).replaceAll("],", "]," + System.getProperty("line.separator")));

দেখে মনে হচ্ছে Arrays.deepToString(arr)পদ্ধতিটি পৃথককারী স্ট্রিং গ্রহণ করা উচিত, তবে দুর্ভাগ্যক্রমে এটি হয় না।


3
হয়তো System.getProperty ("line.separator") ব্যবহার করুন; \ r \ n এর পরিবর্তে এটি উইন্ডোজবিহীন ক্ষেত্রেও ঠিক।
স্কুটার

আপনি এখন System.lineSeparator () ব্যবহার করতে পারেন
নভেটারটা

20
for(int n: someArray) {
    System.out.println(n+" ");
}

6
এইভাবে আপনি খালি স্থান দিয়ে শেষ করেন;)
ম্যাথিয়াস

1
@ ম্যাথিয়াড .. এই লাইনটি ফাঁকা জায়গার সাথে শেষ হওয়া এড়াতে হবে System.out.println (n + (someArray.length == n)? "": "");
মুহাম্মদ সুলেমান

3
এটি করার সবচেয়ে খারাপ উপায়।
NameNotFoundException

@ মুহাম্মাদসুলেমান এটি কাজ করে না, কারণ এটি প্রতিটি লুপ। nঅ্যারে থেকে আসল মান হ'ল সূচকটি নয়। লুপের নিয়মিত জন্য, এটিও হবে (someArray.length - 1) == i, কারণ iঅ্যারে দৈর্ঘ্যের সমান হলে এটি ভেঙে যায় ।
রেডিওডেফ

17

জাভাতে অ্যারেগুলি মুদ্রণের বিভিন্ন উপায়:

  1. সহজ উপায়

    List<String> list = new ArrayList<String>();
    list.add("One");
    list.add("Two");
    list.add("Three");
    list.add("Four");
    // Print the list in console
    System.out.println(list);

আউটপুট: [এক, দুই, তিন, চার]

  1. ব্যবহার toString()

    String[] array = new String[] { "One", "Two", "Three", "Four" };
    System.out.println(Arrays.toString(array));

আউটপুট: [এক, দুই, তিন, চার]

  1. অ্যারে প্রিন্টিং অ্যারে

    String[] arr1 = new String[] { "Fifth", "Sixth" };
    String[] arr2 = new String[] { "Seventh", "Eight" };
    String[][] arrayOfArray = new String[][] { arr1, arr2 };
    System.out.println(arrayOfArray);
    System.out.println(Arrays.toString(arrayOfArray));
    System.out.println(Arrays.deepToString(arrayOfArray));

আউটপুট: [[লাজ্বা.আলং। স্ট্রিং; @ 1 এড 086 এ [[লাজভা.লাং। স্ট্রিং; @ 10385c1, [লাজভা.লাং। স্ট্রিং; @ 42719c] [[পঞ্চম, ষষ্ঠ], [সপ্তম, অষ্টম]]

সংস্থান: একটি অ্যারে অ্যাক্সেস করুন


13

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

for (int i = 0; i < intArray.length; i++) {
   System.out.print(intArray[i] + ", ");
}

এটি আপনার 1, 2, 3, 4, 5 হিসাবে আউটপুট দেয়


4
এটি আউটপুট হিসাবে "1, 2, 3, 4, 5" মুদ্রণ করে, এটি শেষ উপাদানটির পরেও কমা মুদ্রণ করে।
আইজজা

শেষ উপাদানটির পরে কমা না থাকার সমাধান কী?
মোনা জালাল

3
আপনি লুপের মধ্যে কোডটি প্রতিস্থাপন করতে পারেনSystem.out.print(intArray[i]); if(i != intArray.length - 1) System.out.print(", ");
নেপক্সক্স

2
আপনি System.out.print(i + (i < intArray.length - 1 ? ", " : ""));এই দুটি লাইন একত্রিত করতেও ব্যবহার করতে পারেন ।
নিক সুউইন

আপনি একটি স্ট্রিংবিল্ডার ব্যবহার করতে পারেন এবং পিছনের কমাটি কেটে ফেলতে পারেন। int [] intArray = new int [] {1, 2, 3, 4, 5}; ফাইনাল স্ট্রিংবিল্ডার sb = নতুন স্ট্রিংবিল্ডার (); (int i: intArray) {sb.append (intArray [i]) এর জন্য। অ্যাপেন্ড (","); } if (sb.leth ()> 0) b sb.setLength (sb.leth () - 1); । System.out.println (sb.toString ()); এই ফলাফল "1, 2, 3, 4, 5"।
রিক রাইকার

8

আমি ভ্যানিলা # জাভাতে এই পোস্টটি পেরিয়ে এসেছি । এটি খুব সুবিধাজনক লেখা নয় Arrays.toString(arr);, তারপরে java.util.Arrays;সর্বদা আমদানি করা ।

দয়া করে মনে রাখবেন, এটি কোনও উপায়ে স্থায়ী সমাধান নয়। ডিবাগিংকে সহজতর করতে পারে এমন একটি হ্যাক।

একটি অ্যারের মুদ্রণ সরাসরি অভ্যন্তরীণ উপস্থাপনা এবং হ্যাশকোড দেয়। এখন, সমস্ত ক্লাসের Objectপ্যারেন্ট-টাইপ হিসাবে রয়েছে। তাহলে, কেন হ্যাক করবেন না Object.toString()? কোনও পরিবর্তন ছাড়াই, অবজেক্ট শ্রেণিটি এমন দেখাচ্ছে:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

যদি এটিতে পরিবর্তিত হয়:

public String toString() {
    if (this instanceof boolean[])
        return Arrays.toString((boolean[]) this);
    if (this instanceof byte[])
        return Arrays.toString((byte[]) this);
    if (this instanceof short[])
        return Arrays.toString((short[]) this);
    if (this instanceof char[])
        return Arrays.toString((char[]) this);
    if (this instanceof int[])
        return Arrays.toString((int[]) this);
    if (this instanceof long[])
        return Arrays.toString((long[]) this);
    if (this instanceof float[])
        return Arrays.toString((float[]) this);
    if (this instanceof double[])
        return Arrays.toString((double[]) this);
    if (this instanceof Object[])
        return Arrays.deepToString((Object[]) this);
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

এই modded করা বর্গ কেবল কমান্ড লাইন থেকে নিম্নলিখিত যোগ করে বর্গ পথে যোগ করা যেতে পারে: -Xbootclasspath/p:target/classes

এখন, deepToString(..)জাভা 5- এর প্রাপ্যতার সাথে, অন্যান্য অ্যারে ধারণ করে এমন অ্যারেগুলির জন্য সমর্থন যুক্ত toString(..)করতে সহজেই পরিবর্তন করা deepToString(..)যেতে পারে।

আমি এটি বেশ কার্যকর হ্যাক হিসাবে পেয়েছি এবং জাভা যদি এটিকে যুক্ত করতে পারে তবে তা দুর্দান্ত হবে। স্ট্রিংয়ের উপস্থাপনা সমস্যাযুক্ত হতে পারে বলে আমি খুব বড় অ্যারে নিয়ে সম্ভাব্য সমস্যাগুলি বুঝতে পারি। এই জাতীয় ঘটনাগুলির জন্য সম্ভবত একটি System.outবা এর মতো কিছু পাস করুন PrintWriter


2
আপনি ifপ্রতিটি বস্তুতে এই শর্তগুলি কার্যকর করতে চান ?
সিডগেট

কেবলমাত্র ধারণার জন্য +1, তবে পূর্ববর্তী মন্তব্যের ভিত্তিতে, আমরা Objectসাধারণ পিতামাতার উপর নির্ভর করে অ্যারে বাস্তবায়নগুলি সরাসরি মোড করতে পারি ? আমরা কি এই ধারণাটি আরও কাজ করতে পারি? আমি মনে করি না যে
জাভা.লং এর

8

আপনি যে কোনও জেডিকে সংস্করণ ব্যবহার করবেন এটি সর্বদা কাজ করা উচিত:

System.out.println(Arrays.asList(array));

এতে যদি Arrayঅবজেক্ট থাকে তবে এটি কাজ করবে । যদি Arrayএতে আদিম ধরণের থাকে তবে আপনি আদিমকে সরাসরি হিসাবে সংরক্ষণের পরিবর্তে মোড়ক ক্লাস ব্যবহার করতে পারেন ..

উদাহরণ:

int[] a = new int[]{1,2,3,4,5};

এর সাথে প্রতিস্থাপন করুন:

Integer[] a = new Integer[]{1,2,3,4,5};

হালনাগাদ :

হ্যাঁ ! এটি উল্লেখ করার জন্য যে অবজেক্টের অ্যারেতে অ্যারে রূপান্তর করা বা অবজেক্টের অ্যারে ব্যবহার করা ব্যয়বহুল এবং এটি কার্যকর করতে ধীর করতে পারে। এটি অটোবক্সিং নামক জাভা প্রকৃতির দ্বারা ঘটে।

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

public void printArray(int [] a){
        //write printing code
} 

1
কেবল মুদ্রণের উদ্দেশ্যে একটি অ্যারেকে একটি তালিকায় রূপান্তর করা খুব সম্পদশালী সিদ্ধান্ত বলে মনে হয় না; এবং প্রদত্ত যে একই শ্রেণীর একটি রয়েছে toString(..), এটি আমাকে পরাস্ত করে যে কেন কেউ কখনও এটি করেন।
ডিবোস্মিত রায়

8

জাভা 8 এ এটি সহজ। দুটি কীওয়ার্ড রয়েছে

  1. জীবন্ত চ্যাট রুম: Arrays.stream(intArray).forEach
  2. পদ্ধতি রেফারেন্স: ::println

    int[] intArray = new int[] {1, 2, 3, 4, 5};
    Arrays.stream(intArray).forEach(System.out::println);

আপনি একই লাইনে অ্যারের মধ্যে সব উপাদান মুদ্রণ করতে চান, তাহলে শুধু ব্যবহার printপরিবর্তে printlnঅর্থাত

int[] intArray = new int[] {1, 2, 3, 4, 5};
Arrays.stream(intArray).forEach(System.out::print);

পদ্ধতির উল্লেখ ছাড়াই অন্য একটি উপায় কেবল ব্যবহার করুন:

int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.println(Arrays.toString(intArray));

1
এটি অ্যারের প্রতিটি উপাদান আলাদা লাইনে মুদ্রণ করবে যাতে এটি প্রয়োজনীয়তা পূরণ করে না।
অ্যালেক্স স্পার্লিং

আপনি যদি অ্যারে থেকে সমস্ত উপাদান একই লাইনে মুদ্রণ করতে চান তবে প্রিন্টলনের পরিবর্তে প্রিন্ট ব্যবহার করুন অর্থাত্ [] intArray = new int [], 1, 2, 3, 4, 5}; Arrays.stream (intArray) .forEach (System.out :: মুদ্রণ); মেথড্রিফারেন্স ছাড়াই অ্যান্টথরওয়েতে কেবল ইনট্রেওয়ে ব্যবহার করুন [] ইনট্রে অ্যারে = নতুন ইনট [] {1, 2, 3, 4, 5}; System.out.println (Arrays.toString (intArray));
সুটকসকুন

6

যদি আপনার অ্যারে চরের টাইপের হয় তবে একটি অতিরিক্ত উপায় আছে:

char A[] = {'a', 'b', 'c'}; 

System.out.println(A); // no other arguments

কপি করে প্রিন্ট

abc

5

সমস্ত উত্তর যুক্ত করতে, JSON স্ট্রিং হিসাবে অবজেক্টটি মুদ্রণ করাও একটি বিকল্প।

জ্যাকসন ব্যবহার:

ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
System.out.println(ow.writeValueAsString(anyArray));

গসন ব্যবহার:

Gson gson = new Gson();
System.out.println(gson.toJson(anyArray));

এই আমি কি কি. এটির সাহায্যে আপনি যথেচ্ছ জটিল কাঠামো যতক্ষণ জেএসএনে এনকোডেবল না হয়ে মুদ্রণ করতে পারেন। আমি সবসময় "সুন্দর" ব্যবহার নিশ্চিত করে থাকি। আপনার দ্বিতীয় উদাহরণটি কি তা করে? আমি মনে করি এটি পেতে আপনার একটি "সুন্দর" বিকল্পটি টিকল করতে হবে।
স্টিভ

5

আপনি লুপ হিসাবে প্রতিটি অ্যারে মুদ্রণ, অ্যারের মাধ্যমে লুপ করতে পারে। উদাহরণ স্বরূপ:

String[] items = {"item 1", "item 2", "item 3"};

for(int i = 0; i < items.length; i++) {

    System.out.println(items[i]);

}

আউটপুট:

item 1
item 2
item 3

5

অ্যারে মুদ্রণের জন্য নিম্নলিখিত উপায় রয়েছে

 // 1) toString()  
    int[] arrayInt = new int[] {10, 20, 30, 40, 50};  
    System.out.println(Arrays.toString(arrayInt));

// 2 for loop()
    for (int number : arrayInt) {
        System.out.println(number);
    }

// 3 for each()
    for(int x: arrayInt){
         System.out.println(x);
     }

4

একটি সরলিকৃত শর্টকাট আমি চেষ্টা করেছি তা হ'ল:

    int x[] = {1,2,3};
    String printableText = Arrays.toString(x).replaceAll("[\\[\\]]", "").replaceAll(", ", "\n");
    System.out.println(printableText);

এটি মুদ্রণ করবে

1
2
3

এই পদ্ধতির জন্য কোনও লুপের প্রয়োজন নেই এবং এটি কেবলমাত্র ছোট অ্যারেগুলির জন্য সেরা


4

প্রতিটি লুপের জন্য অ্যারের উপাদানগুলি মুদ্রণ করতেও ব্যবহার করা যেতে পারে:

int array[] = {1, 2, 3, 4, 5};
for (int i:array)
    System.out.println(i);

@ ফায়ারফিল সিস্টেম.আউট.প্রিন্টলন (এ [i]); লুপের জন্য সাধারণের সাথে ব্যবহৃত হয়, যেখানে সূচক "i" তৈরি হয় এবং প্রতিটি সূচীতে মান মুদ্রিত হয়। আমি "প্রত্যেকের জন্য" লুপ ব্যবহার করেছি। একবার চেষ্টা করে দেখুন, আশা করি আপনি আমার বক্তব্যটি পেয়ে যাবেন।
hasham.98

হ্যাঁ, এটি অ্যারে প্রিন্ট করার সবচেয়ে সংক্ষিপ্ততম উপায়
মনজিধা তিশার

3
public class printer {

    public static void main(String[] args) {
        String a[] = new String[4];
        Scanner sc = new Scanner(System.in);
        System.out.println("enter the data");
        for (int i = 0; i < 4; i++) {
            a[i] = sc.nextLine();
        }
        System.out.println("the entered data is");
        for (String i : a) {
            System.out.println(i);
        }
      }
    }

3

Org.apache.commons.lang3.StringUtils.join (*) পদ্ধতি ব্যবহার করা একটি বিকল্প হতে পারে
উদাহরণস্বরূপ:

String[] strArray = new String[] { "John", "Mary", "Bob" };
String arrayAsCSV = StringUtils.join(strArray, " , ");
System.out.printf("[%s]", arrayAsCSV);
//output: [John , Mary , Bob]

আমি নিম্নলিখিত নির্ভরতা ব্যবহার

<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>

দু'টি লাইনের কোডে করা তুচ্ছ কিছু কারণে নির্ভরতা যুক্ত করা চিৎকারকারী অ্যান্টিপ্যাটার্ন।
জুরেজ

কমন্স-ল্যাং 3 একটি অত্যন্ত সমৃদ্ধ নির্ভরতা এবং নোট করুন যে এই উত্তরটি ছিল বেশিরভাগ লোকেরা জাভা 8 ব্যবহার করেনি
হাইম রমন

2

এটি একটি বাইট প্রিন্ট করার জন্য সদৃশ হিসাবে চিহ্নিত করা হয়েছে [] । দ্রষ্টব্য: বাইট অ্যারের জন্য অতিরিক্ত পদ্ধতি রয়েছে যা উপযুক্ত হতে পারে।

এটিতে স্ট্রিং হিসাবে মুদ্রণ করতে পারেন যদি এতে ISO-8859-1 অক্ষর থাকে।

String s = new String(bytes, StandardChars.ISO_8559);
System.out.println(s);
// to reverse
byte[] bytes2 = s.getBytes(StandardChars.ISO_8559);

বা এটিতে যদি কোনও ইউটিএফ -8 স্ট্রিং থাকে

String s = new String(bytes, StandardChars.UTF_8);
System.out.println(s);
// to reverse
byte[] bytes2 = s.getBytes(StandardChars.UTF_8);

অথবা আপনি যদি এটি হেক্সাডেসিমাল হিসাবে মুদ্রণ করতে চান।

String s = DatatypeConverter.printHexBinary(bytes);
System.out.println(s);
// to reverse
byte[] bytes2 = DatatypeConverter.parseHexBinary(s);

অথবা আপনি যদি বেস 64 হিসাবে এটি মুদ্রণ করতে চান।

String s = DatatypeConverter.printBase64Binary(bytes);
System.out.println(s);
// to reverse
byte[] bytes2 = DatatypeConverter.parseBase64Binary(s);

অথবা আপনি স্বাক্ষরিত বাইট মানগুলির একটি অ্যারে মুদ্রণ করতে চাইলে

String s = Arrays.toString(bytes);
System.out.println(s);
// to reverse
String[] split = s.substring(1, s.length() - 1).split(", ");
byte[] bytes2 = new byte[split.length];
for (int i = 0; i < bytes2.length; i++)
    bytes2[i] = Byte.parseByte(split[i]);

অথবা আপনি স্বাক্ষরযুক্ত বাইট মানগুলির একটি অ্যারে মুদ্রণ করতে চাইলে

String s = Arrays.toString(
               IntStream.range(0, bytes.length).map(i -> bytes[i] & 0xFF).toArray());
System.out.println(s);
// to reverse
String[] split = s.substring(1, s.length() - 1).split(", ");
byte[] bytes2 = new byte[split.length];
for (int i = 0; i < bytes2.length; i++)
    bytes2[i] = (byte) Integer.parseInt(split[i]); // might need a range check.

1
// array of primitives:
int[] intArray = new int[] {1, 2, 3, 4, 5};

System.out.println(Arrays.toString(intArray));

output: [1, 2, 3, 4, 5]

// array of object references:
String[] strArray = new String[] {"John", "Mary", "Bob"};

System.out.println(Arrays.toString(strArray));

output: [John, Mary, Bob]

1

আপনি যদি jdk 8 চালাচ্ছেন।

public static void print(int[] array) {
    StringJoiner joiner = new StringJoiner(",", "[", "]");
    Arrays.stream(array).forEach(element -> joiner.add(element + ""));
    System.out.println(joiner.toString());
}


int[] array = new int[]{7, 3, 5, 1, 3};
print(array);

আউটপুট:

[7,3,5,1,3]

এটি গৃহীত উত্তরের চেয়ে উত্তম যে এটি ডিলিমিটার, উপসর্গ এবং প্রত্যয়কে আরও নিয়ন্ত্রণ দেয়। যাইহোক, আমি toString()ফাইনালে অতিমাত্রায় অপসারণ করব System.out.println()এবং joiner.add(element.toString())খালি স্ট্রিং যুক্ত করার পরিবর্তে এটি ব্যবহার করব । এই সমাধানটি অ-আদিম ধরণের অ্যারেগুলির জন্যও একইভাবে কাজ করে।
জন ম্যাকক্লেন

আমার খারাপ, element.toString()ভিতরে joiner.add()কেবল অ-আদিম ধরণের জন্য। আপনার এখনও ব্যবহার করতে হবে Integer.toString(element)- যেমন আদিম ধরণের জন্য নির্মাণ। ব্যক্তিগতভাবে, আমি for (int element : array) joiner.add(Integer.toString(element));স্রোতের পরিবর্তে ফোরচ লুপ ব্যবহার করেছি তবে এটি স্বাদের বিষয়।
জন ম্যাকক্লেইন



0

// আপনি যদি জাভাতে কনসোলে অ্যারে উপাদানটির ঠিকানা মুদ্রণ করেন।

      int myArrayElement[] = {1,2,3,4,5,6,7,8,9,10};
       Log.i("MyTag",myIntegerNumbers + "");

এটি প্রশ্নের উত্তর বলে মনে হচ্ছে না।
ব্যবহারকারী

-1

অ্যারে উপাদানগুলি মুদ্রণের বিভিন্ন উপায় রয়েছে all সর্বোপরি, আমি এটি ব্যাখ্যা করব, একটি অ্যারেটি কী? .. অ্যারে ডেটা সংরক্ষণের জন্য একটি সহজ ডেটা কাঠামো..আপনি যখন অ্যারে সংজ্ঞায়িত করেন তখন আনুষঙ্গিক মেমরি ব্লকের সেট বরাদ্দ করুন র‌্যামে। এই স্মৃতি ব্লকগুলিকে একটি ইউনিট নেওয়া হয় ..

ঠিক আছে, আমি এই জাতীয় একটি অ্যারে তৈরি করব,

class demo{
      public static void main(String a[]){

           int[] number={1,2,3,4,5};

           System.out.print(number);
      }
}

এখন আউটপুট দেখুন,

এখানে চিত্র বর্ণনা লিখুন

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

class demo{
      public static void main(String a[]){

           int[] number={1,2,3,4,5};

           int i;

           for(i=0;i<number.length;i++){
                 System.out.print(number[i]+"  ");
           }
      }
}

এখন আউটপুট দেখুন,

এখানে চিত্র বর্ণনা লিখুন

ঠিক আছে, একটি মাত্রিক অ্যারের সফলভাবে মুদ্রিত উপাদানগুলি..এখন আমি দ্বিমাত্রিক অ্যারে বিবেচনা করতে যাচ্ছি..আমি দুটি মাত্রা অ্যারেটিকে "সংখ্যা 2" হিসাবে ঘোষণা করব এবং "অ্যারেএসডিপিটিওস্ট্রিং ()" কীওয়ার্ড ব্যবহার করে উপাদানগুলি মুদ্রণ করব। এটি ব্যবহার করার আগে আপনাকে 'java.util.Arrays' লাইব্রেরি আমদানি করতে হবে।

 import java.util.Arrays;

 class demo{
      public static void main(String a[]){

           int[][] number2={{1,2},{3,4},{5,6}};`

           System.out.print(Arrays.deepToString(number2));
      }
}

আউটপুট বিবেচনা করুন,

এখানে চিত্র বর্ণনা লিখুন

একই সময়ে, দুটি লুপের জন্য ব্যবহার করে 2 ডি উপাদান মুদ্রণ করা যায় .. ধন্যবাদ!


int অ্যারে [] = {1, 2, 3, 4, 5}; (int i: অ্যারে) জন্য System.out.println (i);
মনজিথা তিশার

এটিকে চেষ্টা করুন আমি মনে করি এটি অ্যারে প্রিন্টের সবচেয়ে সংক্ষিপ্ততম উপায়
মনজিথা তিশার

"যার অ্যারে (সংখ্যা অ্যারে) ঘোষিত মেমরি ঠিকানাটি মুদ্রিত হয়" এটি মোটেই সত্য নয়, এর সিস্টেমের হ্যাশ কোড অবজেক্ট এবং এটি মেমরির ঠিকানা সহ অনেকগুলি বিষয়ের উপর ভিত্তি করে তৈরি করা যেতে পারে তবে এটি পরে পরিবর্তন হতে পারে এবং হ্যাশ কোডটি না পরিবর্তন. এবং বর্তমানে এটি বেশিরভাগ এলোমেলো সংখ্যা। getofinal.dev/java/2017/10/08/java-default-hashcode.html
গোটোফিনাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.