質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

5回答

9294閲覧

int型配列の中身を取り出し、カンマ区切りで出力する方法

aae_11

総合スコア178

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

1グッド

0クリップ

投稿2020/03/09 09:07

編集2020/03/09 09:07

以下のコードにおいて、配列の値を、カンマ区切りで表示する際、もう少し簡潔に記載する方法があれば教えて欲しいです。

java

1 2package sample; 3public class sample4 { 4 public static void main(String[] args) { 5 6 int[] arrays1 = {96,45,31,29,84,77}; 7 8 9 display(arrays1,false); 10 11 } 12 public static void display(int[] ar,boolean isSorted) { 13 String msg = ""; 14 String num_list = ""; 15 if (isSorted == false) { 16 msg = "***並び替え前***"; 17 }else if (isSorted == true) { 18 msg = "***並び替え後***"; 19 } 20 21 for(int i = 0; i < ar.length; i++) { 22 if(i == ar.length - 1) { 23 num_list += Integer.toString(ar[i]); 24 break; 25 26 } 27 num_list += Integer.toString(ar[i]) + ","; 28 29 30 } 31 32 System.out.println(msg); 33 System.out.println(num_list); 34 35 } 36} 37

displayメソッドに配列を渡しその中のfor文で該当の処理を行ない、System.out.println()で表示を行なっているのですが、こちらより簡潔に表示を行う方法はありますでしょうか?
最終的な表示結果は以下のようにしたいと考えています。

***並び替え前*** 96,45,31,29,84,77
newyee👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

出力形式が質問記載のものじゃないので答えじゃないです。

[1, 2, 3]のような文字列になりますが
(docs.oracle.com)Arrays.toString()が配列の内容を表示するだけなら手っ取り早いです。

println(Arrays.toString(arrays1));
で出力できます。

むりやり質問記載の出力にするなら(やらない方がいいけど。。。)
println(Arrays.toString(arrays1).replaceAll("[[] ]", ""));
とかするとなるんじゃないかな。
これやるくらいならほかの方の回答にある通りArrays.stream使うべき。

java

1import java.util.Arrays; 2 3public class sample4 { 4 public static void main(String[] args) { 5 6 int[] arrays1 = {96,45,31,29,84,77}; 7 String msg = Arrays.toString(arrays1); 8 System.out.println(msg); 9 10 } 11}

結果

console

1$ java sample4 2[96, 45, 31, 29, 84, 77]

投稿2020/03/09 09:56

編集2020/03/09 10:30
Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aae_11

2020/03/09 10:08

ご回答ありがとうございます。 >println(Arrays.toString(arrays1)); こちらのやり方で試してみたのですが、結果的にはリストに文字列(カンマを含む)が格納された形となるのですね。 こちらも用途によっては、使っていけたらと考えています。 自分はjavaの経験が浅く、Arrays.streamについてはわからない部分が多い為、調べつつ使用していけたらと考えています。
Y.H.

2020/03/09 10:29

> 結果的にはリストに文字列(カンマを含む)が格納された形となるのですね。 いいえ。文字列として"[96, 45, 31, 29, 84, 77]"が返ります。 回答に追記しておきました。
aae_11

2020/03/09 11:13

返信ありがとうございます。 リスト型ではなく、カッコを含んだ文字列として返されるといった訳だったのですね...
guest

0

本題から外れますが、isSorted を false や true と比較しているのが気持ち悪いので
そこを簡潔に書いてみます。

Java

1package sample; 2 3public class sample4 { 4 public static void main(String[] args) { 5 int[] arrays1 = { 96, 45, 31, 29, 84, 77 }; 6 display(arrays1, false); 7 } 8 9 public static void display(int[] ar, boolean isSorted) { 10 System.out.println(isSorted ? "***並び替え後***" : "***並び替え前***"); 11 int n = ar.length - 1; 12 for (int i = 0; i < n; i++) System.out.print(ar[i] + ","); 13 System.out.println(ar[n]); 14 } 15}

カンマ区切りの方は次のようにも書けます。

Java

1 for (int n = ar.length - 1, i = 0; i <= n; i++) 2 System.out.print(ar[i] + (i < n ? "," : "\n")); 3}

ループの中で i < n の判定を何度も行うのが気に入りませんが。

投稿2020/03/11 20:06

編集2020/03/11 20:17
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aae_11

2020/03/15 03:42 編集

ご回答ありがとうございます。 >「for (int i = 0; i < n; i++) System.out.print(ar[i] + ",");」 こちらのように、for文って一行で書くことも出来るんですね。 >(i < n ? "," : "\n")); こちらは短縮構文みたいなやつですかね?javaは経験が浅くわからない部分も多い為、勉強になりました。
guest

0

ベストアンサー

swordoneさんとほぼ同じですが、区切り文字がカンマなので。
java8以上であれば使えます。

java

1package sample; 2 3import java.util.Arrays; 4import java.util.stream.Collectors; 5 6public class sample4 { 7 8 public static void main(String[] args) { 9 10 int[] arrays1 = {96,45,31,29,84,77}; 11 12 13 display(arrays1,false); 14 15 } 16 public static void display(int[] ar,boolean isSorted) { 17 String msg = ""; 18 if (isSorted == false) { 19 msg = "***並び替え前***"; 20 }else if (isSorted == true) { 21 msg = "***並び替え後***"; 22 } 23 24 String num_list = Arrays.stream(ar) 25 .mapToObj(String::valueOf) 26 .collect(Collectors.joining(",")); 27 28 System.out.println(msg); 29 System.out.println(num_list); 30 31 } 32} 33

投稿2020/03/09 09:22

yureighost

総合スコア2183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aae_11

2020/03/09 09:55

ご回答ありがとうございます。 自分の勉強不足かとは思うのですが、「.mapToObj(String::valueOf)」こちらの部分なのですが、mapToObjメソッドに、String型のvalueOfメソッドを指定しているといった形でしょうか...?
yureighost

2020/03/09 10:12

ここら辺はjava8のstreamという機能を調べてもらうのが一番なんですが、 mapToObjメソッド内部にはint型を引数として受け取り、String型を返すという関数を渡します。 String::valueOfの記述はこのメソッドの他に処理が無い時に簡略的に書けるメソッド参照という物です。
aae_11

2020/03/09 11:12

ご返信ありがとうございます。 javaの経験が浅い為、streamに関しましては、難しく理解できない部分も多い為、取り敢えずは、このような形式で書くものだという認識でも良いかもしれないですね...
guest

0

Streamを使って。

java

1String result = Arrays.stream(ar) 2 .mapToObj(Integer::toString) 3 .collect(Collectors.joining(","));

投稿2020/03/09 09:17

編集2020/03/09 09:33
swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aae_11

2020/03/09 10:26

ご回答ありがとうございます。 メソッドの大方な理解なのですが、「.mapToObj(Integer::toString)」こちらでint型からString型の配列へ変換をし、「 .collect(Collectors.joining(","));」ここで変換した配列の中身をカンマ区切りにする形でしょうか...?
swordone

2020/03/09 11:19

正確には「配列」ではないですが、そんな感じです。
guest

0

こちらより簡潔に表示を行う方法はありますでしょうか?

という質問でしたら「あります」

あとは検索がんばってください。

投稿2020/03/09 09:17

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問