アプリ版:「スタンプのみでお礼する」機能のリリースについて

前投稿で解決した件で追加でのご質問ですが




9桁の数値文字列→カンマと*を含んだ11桁の文字列

000000000     → **********0
000000999    → ********999
123456789    → 123,456,789

と実行結果を求めたいときに下記ソースで解決しました。


int value = Integer.valueOf(九桁金額1).intValue();

NumberFormat nf = new DecimalFormat("###,###,##0");
String formatted = nf.format(value);

//***,***,***形式Ver
System.out.print("***,***,*** ".substring(formatted.length()) + formatted +"|");

}

こちらに
int value = Integer.valueOf(九桁金額2).intValue();
と別の金額項目を加えたいときに
IF分で何々の時は九桁金額1
何々の時は九桁金額2と条件判定した場合
System.out.printの結果は
int value = Integer.valueOf(九桁金額1).intValue();で
int型から読み込んだ文字列は
DecimalFormatの値に依存しているため
条件が増えるたびに
System.out.print結果を変更しなければなりません。
九桁金額1と九桁金額2のSystem.out.print結果を
その都度変更せずに
判定させる方法はありますでしょうか?
どうぞよろしくお願いいたします。

A 回答 (3件)

要は、複数の値(金額)を同じ形式で表示したいが値ごとにフォーマットルーチンを書くのは非効率なので何とかしたい、ということですよね?


No.2さんも言っているように、引数に String 一つを取るフォーマット用メソッドを作れば良いのでは?


例) ------------------------------------------

public static void main(String[] args) {

//  ・・・

 System.out.println(delimitCommaAndFillWithAster("000000000"));
 System.out.println(delimitCommaAndFillWithAster("000000999"));
 System.out.println(delimitCommaAndFillWithAster("123456789"));

//  ・・・

 String amount;
 if (条件判定) {
  amount = "000000999";
 } else {
  amount = "001234567";
 }

 String formatted = delimitCommaAndFillWithAster(amount);
 System.out.println(formatted);

//  ・・・

}

//  ・・・

private static String delimitCommaAndFillWithAster(String value) {
 int intValue = Integer.parseInt(value);
 String commaDelimited = new DecimalFormat("###,###,##0").format(intValue);
 return "***,***,***".substring(commaDelimited.length()) + commaDelimited;
}

----------------------------------------------

なお、new DecimalFormat("###,###,##0") は定数にしたくなるかも知れませんが java.text.Format 系のクラスはスレッドセーフではないので一回一回インスタンスを生成した方が無難です。
http://java.sun.com/javase/ja/6/docs/ja/api/java …
    • good
    • 0
この回答へのお礼

>No.2さんも言っているように、引数に String 一つを取るフォーマット用メソッドを作れば良いのでは?

そうです。
フォーマット用メソッドを作りたかったのです。
ご提示いただいたサンプルを
そのまま使用させて頂いた形になりましたが
これで今後違うメソッドから金額フォーマット用プログラムを呼び出せるようになりましたので
作業効率UPと、ソースをすっきりまとめられそうです。
下記のようにして


//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//金額ルーチン ***,***,**9形式Ver
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

private static String delimitCommaAndFillWithAster(String value) {
int intValue = Integer.parseInt(value);

String commaDelimited = new DecimalFormat("###,###,##0").format(intValue);


//***,***,**9形式Ver
return "***,***,***".substring(commaDelimited.length()) + commaDelimited;


}

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

各メソッドに指示する事が出来ました。
今後は他のプログラムもこの方法で
無駄なソースを省ければと思ってます。
本当にどうもありがとうございました。


//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

private void 各種金額編集(String 九桁金額1, String 九桁金額2, .....................................................)


f (九桁金額2.compareTo ("000000000") == 0) {
System.out.println(delimitCommaAndFillWithAster(九桁金額1));


} else {
System.out.println(delimitCommaAndFillWithAster(九桁金額2));}


}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

お礼日時:2012/09/11 15:27

String 九桁フォーマット(int v)


みたいな変換メソッドにするとか

int value;
if (...)value=金額1;
if (...)value=金額2:

みたいに値だけ変えるとか


ってことでしょうか



System.out.printの結果、とか、DecimalFormatの値に依存、とか、よくわからないのですが

この回答への補足

提案どうもありがとうございます。

>String 九桁フォーマット(int v)
>みたいな変換メソッドにするとか

そうですね。
金額変換メソッドにして
他の各メソッドで金額変換作業を複数するとき、
変換メソッドから
呼び出せないかと思いまして。
説明が伝わりにくく申し訳ございません。
すこし考えてみます。

補足日時:2012/09/09 21:53
    • good
    • 0
この回答へのお礼

String 九桁金額フォーマット(int v)

int value1 = Integer.valueOf(金額1).intValue();
int value2 = Integer.valueOf(金額2).intValue();
int value3 = Integer.valueOf(金額3).intValue();


NumberFormat nf1 = new DecimalFormat("###,###,##0");
NumberFormat nf2 = new DecimalFormat("###,###,##0");
NumberFormat nf3 = new DecimalFormat("###,###,##0");
String 金額1Z形式 = nf1.format(value1);
String 金額2Z形式 = nf2.format(value2);
String 金額3Z形式 = nf3.format(value3);

のような金額メソッドがあるとします。
このメソッドを
下記のような
別のメソッドへ呼び出せると作業効率が上がるなと思っているのですが
アドバイス等ありましたらどうぞよろしくお願い致します。

private void 各種金額編集(?????????????????....................)
if (???=0) {
System.out.print ("***********".substring(金額1Z形式.length()) + 金額1Z形式);

} else {

System.out.print("***********".substring(金額2Z形式.length()) + 金額2Z形式);

お礼日時:2012/09/10 10:36

何をしたいのかわかりません.

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています