2017-01-29 5 views
5

Obecnie używam losowego genertora do generowania liczb 9-cyfrowych numerów dla mnie. Obecnie próbuję użyć String.format, w języku Java, do wydrukowania liczb losowych takich jak ten XXX-XX-XXXX, który jest jak numer ubezpieczenia społecznego. Po prostu nie mogę tego zrobić i nie wiem, jak to zrobić. Używam modulo i wygląda na to, że moje wyściółki są wyłączone lub po prostu zupełnie się mylę. Problem polega na tym, że muszę użyć modulo. Każda pomoc kierująca mnie we właściwym kierunku jest bardzo wdzięczna, dziękuję. Próbuję naprawić identyfikator.Formatowanie SSN za pomocą String.format

public String toString(){ 

     System.out.printf("%d\n",ID); 

     return String.format("First Name: %12s LastName %12s ID: %03d-%02d-%04d ", firstName, lastName,ID%1000,ID%10000, ID%000001000); 

    } 
} 
+0

Zastosowanie dziesiętny format class java –

+0

W kodzie źródłowym nie można podawać numerów rozpoczynających się od 0. Twój numer 00001000 to nie 1000, ale 512. Przeczytaj coś o _octal numbers_, aby dowiedzieć się dlaczego. –

Odpowiedz

4

Spróbuj zrobić

return String.format("First Name: %12s LastName %12s ID: %03d-%02d-%04d ", firstName, lastName,(int)ID/1000000,(int)(ID%1000000)/10000, ID%10000); 
+0

To działało. Czy możesz wyjaśnić, dlaczego musiałeś rzucić to int? – m0d3r

+0

Nie byłem pewien, czy ID jest liczbą całkowitą, więc dodałem, że jest bezpieczny. Jeśli był to podwójny% 0xd musiałby być% 0xf – Locke

+0

Ok to był int, ale po prostu dodałeś wiedzę do mojego programowania java. Dziękuję bardzo. – m0d3r

5

Zasadniczo potrzebne są dwa kroki zamiast jednego: numer przez 10^X

  1. Divide aby usunąć ostatni X cyfr. (N/10^X)
  2. Uzyskaj numer modulo 10^Y, aby pobrać ostatnie cyfry Y. (N % 10^Y)

zmodyfikowany kod

public static int getDigits(int num, int remove, int take) { 
    return (num/(int)Math.pow(10, remove)) % (int)Math.pow(10, take); 
} 

public String toString() { 
    return String.format("First Name: %12s LastName %12s ID: %03d-%02d-%04d ", 
          firstName, lastName, 
          getDigits(ID, 6, 3), getDigits(ID, 4, 2), getDigits(ID, 0, 4)); 
} 

alternatywne rozwiązanie

Konwersja liczby na string i korzystać String.substring wyciąć odpowiednie kawałki

public String toString() { 
    String IdStr = String.valueOf(ID); 
    return String.format("First Name: %12s LastName %12s ID: %03d-%02d-%04d ", 
          firstName, lastName, 
          IdStr.substring(0, 3), IdStr.substring(3, 5), IdStr.substring(5, 9)); 
}