02:34:40日付書式を複数指定する場合、引数もその個数分必要。2008/05/20ひとつの日時に複数の日時要素を使いたい場合、引数番号を使用するのが楽かも。2008/05/20書式指定文字には大文字小文字で区別があるので、使用する際は注意。日付書式は全く違うものが割り当てられている。書式指定文字が大文字なら値が大文字に変換される。「%b」はtrue又はfalseになるが、「%B」だとTRUE・FALSEになる。「%S」も、デフォルトでは大文字に変換される。C言語では、書式指定に合致した値を引数に指定する必要があった。(なので、例えばC言語でlong値を指定する場合は「%ld」のように「long型整数」という指定をする必要があった。'l'」という例外が発生する))Javaでは引数はObject型なので、その値を書式に合わせて変換してくれる。"123");...OK(当然)※C言語と同じく可変引数部分に数値(プリミティブ型)を置く書き方が出来るが、実際にはオートボクシングによってラッパークラスに変換されるので、実行速度を考えるならそれを意識した方がいいだろう。$」の動作はC言語とちょっと違うようだ。33:11:11C言語では、%1$d(1番目を指定)の後の%d(番号指定なし)は2番目(最後の番号指定の次の番号)の値が使われるのに対し、Javaでは、n$の指定(番号指定)は全く無視して、番号指定の無いもの同士だけで順番に値が使われるようだ。「$」と似たような機能である「<」については、忠実に直前の値を使用する。44%sの桁指定について書式指定の「%s」に桁数や精度(最大表示幅)を指定をする場合、文字数のカウントはUNICODEで行われる。[2008-07-29]すなわち、いわゆる半角文字(文字コード0x7f未満)と全角文字も、文字数は同じ扱いになってしまう。等幅のコンソールに出力した場合、たぶん期待している状態にならない。]Formattable書式指定の「%s」は、基本的に、引数のtoString()を呼んで変換するものと思ってよいだろう。(nullの場合は"null"になってくれる)ただし、引数のインスタンスのクラスがFormattableインターフェースを実装している場合は、そのクラスのformatTo()メソッドが呼ばれて変換される。自作クラスをprintf()やformat()の「%s」で出力したい場合、その出力のさせ方(表現方法)を(toString()とは別に)実装することが出来る。RuntimeException(e);}}Appendableは文字を出力(追加)する為のインターフェース。Formatter#out()によってインスタンスを取得する。そのまま渡すことが出来る。Formatterには、ioException()という「Appendableで最後に起きたI/O例外を返す」メソッドがある。FormatterにはIOExceptionをセットするメソッドが無い!なので、Appendable#append()はIOExceptionを投げる可能性がある(throwsで宣言されている)にも関わらず、Formatterにセットする術が無い...。ms);}formatTo()の引数であるformatterにもformat()メソッドがある。自分自身のインスタンス内のそれぞれの値をそこに渡して変換してやればよい。この例では、もっと簡便に以下の様にすることも出来る。this);}全ての書式指定に「%1$」という引数番号を指定しているので、(もしくは「%<」という直前の値を使う指定をしているので、)可変引数部は一つだけでよい。thisを渡しているので「また自分が呼ばれて無限ループになるんじゃないか」と一瞬思ってしまうかもしれないが、formatTo()が呼ばれるのは「%s」のときだけなので、再度呼ばれることは無い。01:55:45.359...test3formatTo()の引数Formattable#formatTo()の第二引数以降には、書式の属性が渡されてくる。-1widthは、出力する最小文字数。データがこの桁数に足りないときは、スペースで埋めるのが良い。(勝手に埋めてくれたりはしない)precisionは、出力する最大文字数。データはこの桁数までしか出力しないようにするのが良い。(勝手にカットされたりはしない)flagsの定数値はFormattableFlagsに定義されており、ビット論理和で合算されている。必要に応じてフラグを判断して編集内容を変えると良い。技術メモへ戻るメールの送信先:ひしだま。