C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: string.formatに関して


(過去ログ 107 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■63768 / inTopicNo.1)  string.formatに関して
  
□投稿者/ NattoRC (4回)-(2012/10/08(Mon) 22:01:33)

分類:[Java] 

こんばんは。よろしくお願いします。

下記の場合、それぞれ、「%%2d、%%%dd、%%d」はどのようなフォーマット?でしょうか?
はじめの「2」は桁を意味しているのがわかりますが、少し調べてみたのですが、わかりませんでした。

System.out.printf(String.format("%%2d | %%%dd … %%d\n", n),
2, 123, 456);

基本的な質問ですみません。
引用返信 編集キー/
■63769 / inTopicNo.2)  Re[1]: string.formatに関して
□投稿者/ Azulean (48回)-(2012/10/08(Mon) 22:46:36)
Java は最近ほとんど触ってないので外しているかもしれません。

No63768 (NattoRC さん) に返信
> 下記の場合、それぞれ、「%%2d、%%%dd、%%d」はどのようなフォーマット?でしょうか?

%% でエスケープだろうから、%%2d → %2d として出力されるのでは?

「%%2d、%%%dd、%%d」で 1 を引数に format かけたら %2d、%1d、%d という文字列が得られるでしょう。
その次にできた文字列を使って、再度 format(例のコードの場合は printf の引数)すればよいという考え方でしょう。

// 桁数を動的に変えたいと言うこと。
引用返信 編集キー/
■63770 / inTopicNo.3)  Re[2]: string.formatに関して
□投稿者/ NattoRC (5回)-(2012/10/08(Mon) 22:59:27)
No63769 (Azulean さん) に返信
> Java は最近ほとんど触ってないので外しているかもしれません。
>
> ■No63768 (NattoRC さん) に返信
>>下記の場合、それぞれ、「%%2d、%%%dd、%%d」はどのようなフォーマット?でしょうか?
>
> %% でエスケープだろうから、%%2d → %2d として出力されるのでは?
>
> 「%%2d、%%%dd、%%d」で 1 を引数に format かけたら %2d、%1d、%d という文字列が得られるでしょう。
> その次にできた文字列を使って、再度 format(例のコードの場合は printf の引数)すればよいという考え方でしょう。
>
> // 桁数を動的に変えたいと言うこと。

ありがとうございます。

ですが違うようです。

>System.out.printf(String.format("%%2d | %%%dd … %%d\n", n),
>2, 123, 456);

の場合出力結果は
「2 | 123 … 456」となります。はじめに明示しておくべきでしたね。

「%d」で10進数を表示しているのでしょうけれど、
その前後の「%」「d」が何を意味しているのか…

よろしくお願いします。
引用返信 編集キー/
■63771 / inTopicNo.4)  Re[3]: string.formatに関して
□投稿者/ Azulean (49回)-(2012/10/09(Tue) 00:34:43)
2012/10/09(Tue) 00:59:36 編集(投稿者)

No63770 (NattoRC さん) に返信
> >System.out.printf(String.format("%%2d | %%%dd … %%d\n", n),
> >2, 123, 456);
>
> の場合出力結果は
> 「2 | 123 … 456」となります。はじめに明示しておくべきでしたね。

二つの実行結果を分けて考えてください。
私が書いたのは「String.format("%%2d | %%%dd … %%d\n", n)の戻り値であり、「System.out.printf」の出力ではありません。
普通の printf は System.out.printf("%d", n) であり、String.format が入ってきませんよね?なぜ、String.format が入っているのかを考えてみてください。

String.format の戻り値を変数に入れてその変数をデバッガで見るか、System.out.printf("%s", String.format("%%2d | %%%dd … %%d\n", n)); のように String.format の内容を画面に出力してみてください。
そうすれば、私が書いたことと同じような結果になるでしょう。

何に文字列を渡しているか、何から文字列を受け取っているかがポイントです。
printf に直接 "%%2d | %%%dd … %%d\n" を渡しているわけではないのに、実行結果と比較しているので訳がわからなくなります。


// これを読めないと言うことは、誰かが書いたコードを読んでいる?
// それとも、課題を解き明かすのが目的? 課題だったのであれば、自力で解かなかった分、後で後悔するかもしれません。
引用返信 編集キー/
■63817 / inTopicNo.5)  Re[4]: string.formatに関して
□投稿者/ NattoRC (6回)-(2012/10/13(Sat) 16:49:22)
No63771 (Azulean さん) に返信
> 2012/10/09(Tue) 00:59:36 編集(投稿者)
>

このような結果ですね。分けて考えたら簡単でした。
お手数おかけしました。

System.out.printf(String.format("%%2d | %%%dd … %%d\n", 2), 2, 123, 456);

String.format("%%2d | %%%dd … %%d\n", 2)

System.out.printf("%2d | %2d … %d\n")2, 123, 456);
  ↓
2 | 123 … 456

> // これを読めないと言うことは、誰かが書いたコードを読んでいる?
> // それとも、課題を解き明かすのが目的? 課題だったのであれば、自力で解かなかった分、後で後悔するかもしれません。

課題等ではないです。javaの入門書にのっていたものです。

ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -