• ベストアンサー

String.formatの使い方

JavaでString.formatを使いたいですが、書式指定のしかたがよくわかりません。 下記ソースの時、 java.util.MissingFormatArgumentExceptionエラーとなりますが、 どうしたらエラーとならないように正常にできますか? String format = "%1$-6.6s%2$-4.4s"; Object data = "AAAAAA, 1234"; System.out.println(String.format(format, data));

  • Java
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • HNEX
  • ベストアンサー率62% (43/69)
回答No.1

目的の表示にあっているか分かりませんが、これでどうでしょうか dataの部分だけ変えました // 特に変更していません String format = "%1$-6.6s%2$-4.4s"; // 配列にする(それぞれを%1,%2に渡すため) String[] data = {"AAAAAA", "1234"}; System.out.println(String.format(format, data)); // 直接引数に渡してもOK System.out.println(String.format(format, "AAAAAA", "1234"));

関連するQ&A

  • formatメソッドについて

    こんばんは。皆様、今回も宜しくお願い致します<(_ _)> 例えば1という値を渡したら、「001」というように表示させてたくて、下記のようなソースを作成してみました。 import java.text.*; class Main{ public static void main(String args[]){ DecimalFormat fmt = new DecimalFormt(); fmt.setMaximumIntegerDigits(3); fmt.setMinimumIntegerDigits(3); String str = fmt.format(1); System.out.println(str); } } これを実行すると「001」というように、私の希望通りに表示されます。 でも String str = fmt.format(1); の部分を String str = fmt.format("1"); と変更すると下記のエラーが出力されます。 Exception in thread "main" java.lang.IllegalArgumentException: Cannot format giv en Object as a Number at java.text.NumberFormat.format(NumberFormat.java:219) at java.text.Format.format(Format.java:133) at Main.main(Main.java:8) そこでJavaのリファレンスを見て、疑問を持ちました。 リファレンスにはFormatクラスのformatメソッドの引数はオブジェクトになってます。 ということはむしろエラーになったほうが正しくて(String=オブジェクトだから)、普通に実行できたほうがおかしいんじゃないか?(数値=基本型だから)と思ったのです。 どうしてエラーがでるのか、どうしてオブジェクトを渡していないのに普通に実行できるのか、わかる方がいらっしゃったら教えて下さい。 宜しくお願い致します<(_ _)>

    • ベストアンサー
    • Java
  • string formatについて

    フォームの値(年、月、日)を取得し、 yyyy/mm/ddのようにformatしたいのですが、 以下の場合ですと、年2007 月07 日11 としていると、 例外が発生してしまいます。(java.util.FormatFlagsConversionMismatchException) 元々4桁,2桁あるものに関しては0埋めできないのでしょうか? ご教示願います。 (String.format("%04s/%02s/%02s", form.getStart_date_y(), form.getStart_date_m(), form.getStart_date_d()));

    • ベストアンサー
    • Java
  • [JAVA]エラーが解決できません。

    JAVAのエラーが解決できません。 ?,[,],(,)をreplaceAllを用いて置換したいと下記のようなプログラムを書いたのですが正常に動作しません。 また、Unicodeに置き換えても見たのですが、うまく動作しませんでした。 そして、排出されたエラーは下記の通りです。 文中にある、?などの記号を置換したいのですが何か良い方法は無いでしょうか? 何卒、ご教授、宜しくお願い致します。 テストコード>>> class Test { public static void main(String args[]) { System.out.println(args[0].replaceAll("?", "置換?")); System.out.println(args[0].replaceAll("[", "置換[")); System.out.println(args[0].replaceAll("(", "置換(")); } } エラー>>> Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '?' near index 0 ? ^ at java.util.regex.Pattern.error(Unknown Source) at java.util.regex.Pattern.sequence(Unknown Source) at java.util.regex.Pattern.expr(Unknown Source) at java.util.regex.Pattern.compile(Unknown Source) at java.util.regex.Pattern.<init>(Unknown Source) at java.util.regex.Pattern.compile(Unknown Source) at java.lang.String.replaceAll(Unknown Source) at Test.main(Test.java:9)

    • ベストアンサー
    • Java
  • 参照型変数の比較について

    1,2のソースについての質問となります。 ご教授の程お願い致します。 ◇◆1◆◇ class Sample{ public static void main(String args[]){ String s1 = "Hello"; String s2 = "Hello"; String s3 = new String("Hello"); System.out.println(s1 == "Hello"); //(1) } } ◇◆2◆◇ class Sample{ public static void main(String args[]){ String s1 = "Hello!Java"; String s2 = s1; s1 = s1.substring(6); //(2) System.out.println(s1); //(3) System.out.println(s2); //(4) } } ○1の質問 (1)の部分になりますが、 「s1 == "Hello"」の結果がtrueとなる理由が理解しずらいです。 「==」演算子では、「同じオブジェクトを参照しているか」を 比較するものであって、この場合「オブジェクトと文字列」の比較を しているので、falseになると思われます。 仮に、Helloがオブジェクトとして捉えられている場合であっても 「String s3 = new String("Hello");」で作成されたオブジェクトを 参照しているものとなるので、s1と比較をしてもfalseになると 思われます。 ○2の質問 このソースを実行後、 Java Hello!Java と、出力される理由についての質問となります。 (2)で「Java」の文字列を返し、s1に代入されますが、 s2はs1の参照型であるため、「Hello!Java」から「Java」に 変わると思われます。実際には、 Java Java と、出力されると思われます。 以上、わかりにくい箇所があると思われますが、 ご教授の程お願い致します。

    • ベストアンサー
    • Java
  • importが分からない

    importが違うせいだと思いますが、コンパイルできるように直してください。 import java.util.Date; import java.text.SimpleDateFormat; import java.util.Locale; public class a {  public static void main (String args[]) {   Date d = calendar.getTime();   SimpleDateFormat f = new SimpleDateFormat("EEE", Locale.JAPANESE);   String s = f.format(d);   System.out.println(s);  } }

  • javaの問題

    import java.util.Scanner; class test6{ static void printArray(int[] a) { for(int i=0;i<a.length;i++) System.out.print(String.format("%1$6s", (a[i]+" "))); System.out.println(); } static void printArray(int[][] a) { for(int[] i:a) { for(int j:i) System.out.print(String.format("%1$6s",(j+"\t"))); System.out.println(); } } public static void main(String[] args) { int[] a = {12,536,-8,7}; int[][] c = {{32,-1,32,45,67}, {535,99999,2}, {2,5,-123,9}}; printArray(a); printArray(c); } } このプログラムを表示するとこのようになるのですが、 12 536 -8 7 32 -1 32 45 67 535 99999 2 2 5 -123 9 これに一工夫加えて見やすくしたいです。 このような形にするのはどのようにすればよいのでしょうか + + | 32 -1 45 67 | | 535 99999 2 | | 2 5 -123 9 | + +

  • JavaのStringの比較について

    お世話になります。 String string1 = new String("あいうえお"); //(1) String string2 = new String("あいうえお"); //(2) String string3 = "あいうえお"; //(3) String string4 = "あいうえお"; //(4) System.out.println(string1 = = string2); //(5) System.out.println(string3 = = string4); //(6) 実行結果 false true (5)がfalseになるのは分かるのですが、(6)がtrueになるのはなぜでしょう?また、(1)や(2)のようなStringオブジェクトの生成方法と(3)や(4)のようなStringオブジェクトの生成方法の違いは何でしょう? よろしくご教授ください。

    • ベストアンサー
    • Java
  • java 入力命令

    以下うまくどうさしません、教えてください。 public class Main { public static void main(String[] args){ System.out.println("名前"); String name = new java.util.Scanner(System.in) .nextLine(); System.out.println("年齢"); int age = new java.util.Scanner(System.in) .nextInt(); System.out.println (age + name); } }

  • String定数プールと"==演算子"との関係。

    String str1 = new String("str1"); String str2 = new String("str1"); String str3 = "str1"; if(str1 == str2){    System.out.println("same!"); } if(str1 == str3){    System.out.println("same!"); } 上記のコードで実行すると、"same!"が実行されません。 Stringオブジェクトには定数プールがあって、新たにStringオブジェクトが作成されたとき、定数プールに入っているそれまでに存在していたStringオブジェクトの値と同じであったら、新たにStringオブジェクトを作らず、それまでにあったStringオブジェクトの参照を当てるということなのです。 それに従えば、str2,str3はstr1と同じStringオブジェクトを参照しているはずだから、if文の結果はtrueになるはずなんですが、、、。 適切な回答をいただきたく思います。よろしくお願いいたします。

  • string型のフォーマット書式指定の文字列

    char s[20]; sprintf(s, "%c%c%c", 0x40, 0x41, 0x00); と同じことを string型を使って書式フォーマットしたいのですが string ss; からどうすれば、上のようなことができるのでしょうか?