2017-10-11 8 views
0

다음 Long이 있습니다. 201700112345이며, 이것을 2017.001.12345으로 변환하고 싶습니다.Long/String에 도트를 추가하는 String.format

long l = 201700112345L; 
String s = Long.toString(l); 
String result = s.substring(0,4)+"."+s.substring(4,7)+"."+s.substring(7); 

하지만 또한 String.format 편집하여이 작업을 수행 할 수 있습니다 : 단일 입력 ..with String.format 방법의 목적은-변수 인수 매개 변수에 대한

는 난 그냥 문자열을 사용할 수 알아?

어떤 것들은 나는 시도했다 :

난 단지 대신 세 가지 중 하나의 입력을 가지고 있기 때문에 나는 실현 매우 분명하다
String.format("%4d.%3d.%5d", l); 
// Which resulted in: 
java.util.MissingFormatArgumentException: Format specifier '%3d' 

..

내가 사용하여 동일한 입력에 역 추적 할 수 있습니다 알고 %1$는, 그래서 나는 다음 시도 :

:

String.format("%4d.%1$3d.%1$5d", l); 
// Which resulted in: 
201700112345.201700112345.201700112345 

가 나는 또한 올바른 길이 아닌 올바른 부품을 준이 시도

String.format("%.4s.%1$.3s.%1$.5s", Long.toString(l)); 
// Which resulted in: 
2017.201.20170 

필자는 String.format을 자주 사용하지 않았 음을 인정해야합니다. 그래서 어떤 종류의 부분 문자열을 형식으로 가질 수 있는지 확실하지 않습니다. 가능한 경우, 나는

+0

"String.format ("% s. % s. % s ", s.substring (0, 4), s.substring (4, 7), s.substring (7))'을 호출합니다. –

+2

[this so question] (https://stackoverflow.com/questions/5114762/how-do-format-a-phone-number-as-a-string-in-java)과 같은 것이 어쩌면 당신을 도울 수 있습니다. 대시 대신 도트 ..) – Nino

+0

@AndyTurner Hehe, 네, 그럴 가능성이 있습니다. ;) 내 질문을 수정했습니다. –

답변

1

substring를 사용하는 것보다이 일을 더 효율적으로 사용하는 것입니다 .. 그것을 알아낼 수없는 StringBuilder : 이것은 당신이 불필요하게 문자열을 만들지 않도록 할 수 있습니다 append(CharSequence,int,int) 방법이 있습니다 :

String formatted = 
    new StringBuilder(s.length() + 2) 
     .append(s, 0, 4) 
     .append('.') 
     .append(s, 4, 7) 
     .append('.') 
     .append(s, 7, s.length()) 
     .toString();