2012-07-25 2 views
0

사용자가 입력 한 문자열이 25|35|40입니다. 이 형식의 숫자는 100=25+35+40 이하입니다. 예를 들어,자바에서 숫자를 사용자 정의하는 방법은 무엇입니까?

5 --> 05|00|00 
30 --> 25|05|00 
65 --> 25|35|05 

25 | 35 | 40의 순서를 유지해야합니다. 이것은 MM : dd : yyyy 형식과 유사합니다. 달이 12를 초과 할 수없고 날짜가 31을 초과 할 수 없다는 점에서 다릅니다. 그러나 여기에서는 값이 발생할 수 있습니다. 그 위치의 값이 최대 값을 결정합니다. 수는 총 3000=40+110+2500+350를 초과하면 또 다른 예는,

경우 사용자 문자열이 40|110|2500|350

5 --> 05|000|0000|000 
100 --> 40|060|0000|000 
450 --> 40|110|0300|000 
2900 --> 40|110|2500|250 

, 나는 number -= 3000로 만들 수 있습니다. 현재 숫자를 확인하고 필요한 출력 문자열을 생성 할 사용자 지정 코드를 사용하여 서식을 지정하려고합니다. Java에서 사용할 수있는 inbuilt 형식 API가 있습니까?

+0

당신이 당신이 약간의 서식을 잘 설명 할 수 이것은 그것을 해결하는 한 가지 방법은 무엇입니까? 어쩌면 마지막 줄이 '35 | 25 | 05'에서 시작해야할까요? – aioobe

+0

정말 구체적인 비즈니스 사례 인 것 같습니다. % 및 - 문자열 연결로 작업을 수행하기에 충분할 것으로 API를 볼 수 없습니다. 왜 그렇게 형식화합니까, 아마도 도구를 찾는 데 도움이 될 것입니다. – poussma

+0

30/65에서 3 가지 숫자로 어떻게 확장 할 수 있습니까? – vainolo

답변

0

이러한 특정 사용 사례에 대한 공개 API는 없습니다.

int num = 65; 
int i1 = num > 25 ? 25 : num; 
int i2 = num < 25 ? 0 : num > 60 ? 35 : num - 25; 
int i3 = num < 60 ? 0 : num - 60; 
System.out.format("%02d|%02d|%02d", i1, i2, i3); 

인쇄

25|35|05 

또는 그것을 일반화 :

public static String format(String format, int num) { 
    String[] split = format.split("\\|"); 
    int numLeft = num; 
    StringBuilder result = new StringBuilder(); 
    for (int i = 0; i < split.length; i++) { 
     int boundary = Integer.parseInt(split[i]); 
     int number = Math.min(numLeft, boundary); 
     if (result.length() > 0) { 
      result.append('|'); 
     } 
     result.append(leftPad(number, split[i].length())); 
     numLeft = Math.max(0, numLeft - boundary); 
    } 
    return result.toString(); 
} 

private static String leftPad(int number, int length) { 
    StringBuilder sb = new StringBuilder(); 
    sb.append(number); 
    while (sb.length() < length) { 
     sb.insert(0, '0'); 
    } 
    return sb.toString(); 
} 

public static void main(String[] args) { 
    String result = format("25|35|40", 65); 
    System.out.println(result); 
} 
+0

감사! 그러나 이것은 세 개의 세그먼트와 두 개의 십진수 형식으로 만 제한됩니다. – Ahamed

+0

@Ahamed : 예, 업데이트 된 요구 사항을 확인하지 못했습니다. 이제 지정한 모든 형식에 대해 작동합니다. – Keppil

+0

논리를 명확하게 설명하기 위해 제 질문을 업데이트했습니다. 감사!!! – Ahamed

관련 문제