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

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

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

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

Q&A

解決済

5回答

2613閲覧

【Java】コマンドプロンプト上で文字列を改行して表示させる方法を教えてください。

chimo

総合スコア55

Java

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

0グッド

0クリップ

投稿2020/02/16 14:44

Javaで書いた文字列を表示させるコードを、コマンドプロンプト上で改行して表示する方法を教えてもらいたいです。

具体的にわたしがコマンドプロンプト上で表示させたいイメージは以下の通りです。改行して一行目から五行目までを表示させることが目的です。

【目的のイメージ】---------
モコ / トイプードル / 4歳 / メス
ポチ / シバイヌ   / 6歳 / オス
ムギ / パピヨン   / 2歳 / オス
ブブ / ブルドッグ  / 3歳 / メス
シロ / 秋田犬    / 8歳 / オス
ーーーーーーーーーーーーーーーーーー

上記のように表示させたいのですが、わたしがプログラムを書いて実行すると以下のように一連続に表示されてしまいます。

【実際の結果】------------------------------------------
モコ / トイプードル / 4歳 / メス / ポチ / シバイヌ   / 6歳 / オス / ムギ / パピヨン   / 2歳 / オス / ブブ / ブルドッグ  / 3歳 / メス / シロ / 秋田犬    / 8歳 / オス
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

上記の結果になるに至った私が書いたコードは以下の通りです。

Java

1class Ex1_10_4 { 2 public static void main (String[] args) { 3 4 //出力元の2次元配列 5 String[][] animals = { 6 {"モコ" ,"トイプードル" ,"4歳" ,"メス"}, 7 {"ポチ" ,"シバイヌ  " ,"6歳" ,"オス"}, 8 {"ムギ" ,"パピヨン  " ,"2歳" ,"オス"}, 9 {"ブブ" ,"ブルドッグ " ,"3歳" ,"メス"}, 10 {"シロ" ,"秋田犬   " ,"8歳" ,"オス"} 11 }; 12 13 String display = ""; 14 15 for( int i = 0 ; i < animals.length ; i++ ){ 16 17 for( int j = 0 ; j < animals[i].length ; j++ ){ 18 19 display = display + animals[i][j] + " / "; 20 21 } 22 23 } 24 25 System.out.println(display); 26 27 } 28}

どなたかアドバイスくだされば大変嬉しく思います。
よろしくお願いします。

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

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

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

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

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

m.ts10806

2020/02/16 19:32

調べても何も出てきませんか?
guest

回答5

0

入れ子のforはややこしくなりがちですし、行末/の処理も面倒です。

Java

1for (int i = 0; i < animals.length; i++) { 2 System.out.println(String.join(" / ", animals[i])); 3} 4// 拡張for文 5for (String[] array : animals) { 6 System.out.println(String.join(" / ", array)); 7}

これで十分ではないですか。

投稿2020/02/16 22:52

TN8001

総合スコア9813

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

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

chimo

2020/02/18 04:59

回答いただきありがとうございました!!今回はforの制御構文を学習したためあえてforをいれこで使ってみましたが、今後のことを考えるとたしかにforのいれこはクオリティの高いコードではないかもしれませんね。その点もふまえてアドバイス頂き、私にとって学びの多い回答を頂けて大変嬉しく思います。ありがとうございました!!
guest

0

案1:
displayに追加する際に、改行したいところで改行コードSystem.lineSeparator()を追加する。

案2:
行ごとにSystem.out.println()する。

投稿2020/02/16 14:58

otn

総合スコア85778

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

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

chimo

2020/02/18 04:20

一番最初に回答して頂きありがとうございました!他の回答者様の意見も参考にしてみると案1がより良い解決策なのかなぁと感じました。まだまだ学習初心者ですが頂いた案を大切にして今後の学習を進めていきたいと感じております。あらためて、誰よりもお早い回答ありがとうございました^-^*
guest

0

余り綺麗じゃないですが一番コードを変えず改行を行うには

java

1for( int i = 0 ; i < animals.length ; i++ ){ 2 for( int j = 0 ; j < animals[i].length ; j++ ){ 3 display = display + animals[i][j] + " / "; 4 } 5 display += "\n"; 6} 7

このようにすれば可能だと思います.
ただコードとしては
keicha_hrsさんやTN8001さんのコードを用いた方が綺麗かと思います
###追記
行の最後に/が入ると指摘頂きました
この修正をすることは簡単ですが
ここまでくるとこの方法は辞めた方がいいと思います...

投稿2020/02/18 01:28

編集2020/02/18 02:20
Sepi

総合スコア36

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

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

Y.H.

2020/02/18 02:10

各行末に" / "が出力されてしまいますね。
Sepi

2020/02/18 02:15

おっしゃる通りですね...
chimo

2020/02/18 04:02

回答頂き大変ありがとうございます!最後の行に" / "が入ってしまうとのことでしたが、新しい知識・表現方法を教えていただけたので、大変実りのある回答を頂けたと感じております。あらためて回答していただきありがとうございました *^-^*
guest

0

java.util.stream.Streamを使う例

importするクラス。

Java

1import java.util.Arrays; 2import java.util.stream.Collectors;

終端処理で各行を出力する。

Java

1Arrays.stream(animals) 2 .map(e -> Arrays.stream(e).collect(Collectors.joining("/"))) 3 .forEach(System.out::println);

全体をStringにして出力する。

Java

1String line = Arrays.stream(animals) 2 .map(e -> Arrays.stream(e).collect(Collectors.joining("/"))) 3 .collect(Collectors.joining(System.lineSeparator())); 4System.out.println(line);

ここまではotnさんと同じ方法です。

改行文字 - System.getProperty("line.separator");

改行文字列の別の取得方法を追記します。

Java

1static final String LINE_SEPARATOR = System.getProperty("line.separator");

このLINE_SEPARATORを使うと次のようになります。

Java

1String line2 = Arrays.stream(animals) 2 .map(e -> Arrays.stream(e).collect(Collectors.joining("/"))) 3 .collect(Collectors.joining(LINE_SEPARATOR)); 4System.out.println(line2);

プラットフォームごとに改行文字列が異なる

念のため、プラットフォームごとに改行文字列が異なるのはご存じですね。System#lineSeparator

System.lineSeparator()はJava 7以降。その前は直接プロパティ"line.separator"の値を取得していました。Java 7以降のSystemクラスのソースコードを読めば内部に"line.separator"の値を保持しているのがわかります。

投稿2020/02/17 12:00

編集2020/02/18 03:41
xebme

総合スコア1089

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

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

xebme

2020/02/18 03:42

評価マイナスは、行いが悪いからだと思っておきます。
chimo

2020/02/18 04:11

返信遅れて申し訳ないです。回答頂き大変ありがとうございました!!line.separatorに関することと、プラットフォームごとに改行文字列が異なることも知りませんでした。私がJavauserとして未熟すぎるために回答頂いた内容を全て理解することは難しかったですが、長期的に見ていつか理解できるよう学習の途中で折に触れて見返したい内容であると感じました。改めて、回答ありがとうございました!!
guest

0

ベストアンサー

このような感じで目的のイメージになりませんか。

java

1 for( int i = 0 ; i < animals.length ; i++ ){ 2 String display = ""; 3 4 for( int j = 0 ; j < animals[i].length ; j++ ){ 5 display = display + animals[i][j]; 6 7 // 最後の1つ以外には" / "を連結するための処理 8 if ( j < animals[i].length - 1 ){ 9 display = display + " / "; 10 } 11 } 12 13 System.out.println(display); 14 } 15

投稿2020/02/16 14:58

keicha_hrs

総合スコア6768

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

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

chimo

2020/02/18 04:51

回答頂き有難うございました!!今回はfor分の練習のためにあえてforのいれこを行いたかったので、その部分を崩さずに、かつ比較的易しい方法で代替案を考えてくださって大変助かりました!自分でも実際にやってみて、思い描いていたイメージをコマンドプロンプト上で表示させることもできました!ただ、なぜifを使うことで改行されたのかが不思議です…。if{最後のひとつ以外には" / "をいれる}でfalseだと、なにも命令していないのに上手く改行されてしまうんでしょうか???
keicha_hrs

2020/02/18 14:43

if文の部分は改行には関係しません。何なら、このif文のブロックを撤去して実行してみましょう。各行の末尾に" / "が付いてしまいますが、5行出力する結果は得られるはずです。改行の出力という点に絞るならば、重要なのはprintln()をいつ実行するかです。質問のコードでは、外側のforループを抜けたときに実行しています。一方で、上記で回答したコードでは、内側のforループを抜けたときに実行しています。そこに注目しましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問