2012-04-19 3 views
2

질문을 게시하기 전에 주제를 다소 연구했지만 대답을 찾을 수 없습니다.DecimalFormat 변수 그룹 크기

입력 : (아무 분수) 7 ~ 8 진수 공백이 긴 숫자를 여기

내가 할 노력하고있어 무슨.

출력 : "X XXXXXX X"(X는 숫자)가 있어야합니다.

예 : 1234567 => 0 123456 7

내가 시도하는 것 :

DecimalFormatSymbols group = new DecimalFormatSymbols(); 
group.setGroupingSeparator(' '); 
DecimalFormat idFormat = new DecimalFormat("0,000000,0", group); 

을하지만 대신에 "0 1 2 3 4 5 6 7"같은 것을 인쇄 : 내가 잘못 뭐하는 거지 S ?

편집 :

DecimalFormatSymbols group = new DecimalFormatSymbols(); group.setGroupingSeparator(' '); group.setDecimalSeparator(' '); DecimalFormat idFormat = new DecimalFormat("0,000000.0", group); 

그리고 설명서를 다시 읽어에서

, 나는 DecimalFormat의 인쇄 할 수있는 방법이 없음을 깨달았다

내가 이렇게하면 내가 필요한 인쇄 할 수 있습니다 가변 길이 그룹 (나는 2를 필요로하기 때문에 운이 좋다 - 그래서 나는 분수 부분을 사용할 수있다). 그러나 이것을 어떻게 "적절하게"할 수 있습니까? 여기에서 정규 표현식을 사용하거나 내 자신의 함수를 작성하는 것이 좋을까요, 아니면 이미 이렇게하는 라이브러리가 있습니까?

EDIT2 :

그냥 차기를 들어, 아래 그 일의 정규식 기반 방법 :

Random random = new Random(); 
System.out.println(
     String.valueOf(Math.round(random.nextDouble() * 1e8)) 
     .replaceAll("(.*)(\\d{6})(\\d)$", "$1 $2 $3") 
     .replaceAll("^ ", "0 ")); 
+0

정규식이 여기에서 도움이되지 않을 것이라고 생각합니다. 구문 분석을위한 것입니다. AFAIK 형식을 10 진수로 정규 표현식을 사용할 수있는 방법이 없습니다. – Alex

답변

1

당신이의 DecimalFormat 그룹화 구분 기호를 사용할 수 있다고 생각하지 않습니다이다. Javadoc에서 :

여러 그룹화 문자가있는 패턴을 제공하면 마지막 정수와 정수의 끝 사이의 간격이 사용됩니다. 그래서 "#, ##, ###, ####"== "######, ####"== "##, ####, ####".

+0

나는 일반적인 접근법을 모른다. 나는 아마 내 자신을 쓰고, 비교적 간단해야합니다. – Alex

0

이 같은 목적을 위해 ICU4J 라이브러리의 com.ibm.icu.text.DecimalFormat 클래스를 사용할 수 있습니다. 가변 길이 그룹 크기를 지원합니다. 특정 경우 :

com.ibm.icu.text.DecimalFormatSymbols dfs = new com.ibm.icu.text.DecimalFormatSymbols(); 
dfs.setGroupingSeparator(' '); 
com.ibm.icu.text.DecimalFormat df = new com.ibm.icu.text.DecimalFormat("0,000000,0", dfs); 

'1234567'과 같은 숫자는 '0 123456 7'이어야합니다.