- PR -

3桁数字の編集正規表現

1
投稿者投稿内容
くろやぎ
会議室デビュー日: 2005/08/21
投稿数: 3
お住まい・勤務地: 神奈川県
投稿日時: 2005-08-21 18:34
こんにちは。
現在文字列型の数値(小数点あり、負数あり)を
3桁ごとにカンマ編集するルーチンを実装しようとして、
煮詰まっています。
現状は1回目のみ実行されているようなのですが、うまく動いてくれません。
どこが問題なのか、指摘していただけると助かります。
どうか、よろしくお願いします。

(バージョン j2sdk1.4.1 OS Windows.XP Service Pack2)

//---コード-start
String value = "-123456.789";
String resStr;
Pattern pattern1 = Pattern.compile("^([+-]?\\d+)(\\d\\d\\d)");
Matcher matcher1 = pattern1.matcher(value);
StringBuffer str = new StringBuffer();
while ( matcher1.find() ) {
matcher1.appendReplacement(str,"$1,$2");
}
matcher1.appendTail(str);
resStr = str.toString();

//---コード-end
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2005-08-21 18:51
普通にNumberFormatを利用してはだめなのですか?
くろやぎ
会議室デビュー日: 2005/08/21
投稿数: 3
お住まい・勤務地: 神奈川県
投稿日時: 2005-08-21 20:19
ご返答ありがとうございます。
ひとつ大事な用件を抜かしておりました。
valueに設定される値はBigDecimalの範囲を含みます。

NumberFormatではうまく行かないと思い、
あとは正規表現で変換するほかないかなと考えたはいいのですが、
うまく動いていない次第です。

jk
ベテラン
会議室デビュー日: 2005/08/19
投稿数: 94
投稿日時: 2005-08-21 20:51

DecimalFormat というのがあるみたいですけど..

http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/text/DecimalFormat.html
くろやぎ
会議室デビュー日: 2005/08/21
投稿数: 3
お住まい・勤務地: 神奈川県
投稿日時: 2005-08-21 21:31
Anthyhimeさん、jkさん感謝です。
次のようにやったら、うまくいきました!!!

DecimalFormatは勉強不足でした。
どうもありがとうございました。

//---コード-start
String value = "-123456.789";
String resStr;
BigDecimal bdvalue = new BigDecimal(value);
DecimalFormat decimalformat = new DecimalFormat("###,###");
resStr = decimalformat.format(bdvalue);
//---コード-end
明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 2005-09-12 18:42
正規表現でやる方法です
オライリーのフクロウ本の受け売りですが・・・


class RegexTest {
public static void main(String[] argv){

System.out.println("-1234".replaceAll("(?m)(?<=\\d)(?=(?:\\d{3})+$)",","));
System.out.println(" -123".replaceAll("(?m)(?<=\\d)(?=(?:\\d{3})+$)",","));
System.out.println(" 1234".replaceAll("(?m)(?<=\\d)(?=(?:\\d{3})+$)",","));
System.out.println("12345".replaceAll("(?m)(?<=\\d)(?=(?:\\d{3})+$)",","));
System.out.println("123456".replaceAll("(?m)(?<=\\d)(?=(?:\\d{3})+$)",","));
System.out.println("123456789".replaceAll("(?m)(?<=\\d)(?=(?:\\d{3})+$)",","));
System.out.println("-12346789".replaceAll("(?m)(?<=\\d)(?=(?:\\d{3})+$)",","));
}
}


OracleSQLパズル
http://oraclesqlpuzzle.hp.infoseek.co.jp
1

スキルアップ/キャリアアップ(JOB@IT)