2015-06-10 4 views
1

Я создал проверку дублирования, которая гарантирует, что только что созданные имена пользователей уникальны.Возврат отформатированной строки не работает должным образом

Это выглядит следующим образом:

String p1 = <code>; //First 3 chars in first name 
String p2 = <code>; //First 3 chars in last name 
int p3 = 1;   //Unique identifier. 
boolean dupeCheck; 

do { 
    dupeCheck = false; 
    for (int i = 0; i < userNameList.size(); i++) { 
    if (userNameList.get(i).equals(p1+p2+Integer.toString(p3))) { 
     dupeCheck = true; 
     p3++; 
    } 
    } 
} while (dupeCheck == true); 

Это работает, если я вернуть:

return String.format("%s%s%d", p1, p2, p3); 

Повторяющиеся имена пользователей получают имена, как:

  • xxxyyy1
  • xxxyyy2
  • xxxyyy3

Отлично. Но я хочу, чтобы уникальный идентификатор (p3) всегда был трехзначным. Именно здесь String.format вступает в игру вместе с моими проблемами.

Если я вернуть следующий код:

return String.format("%s%s%03d", p1, p2, p3); 

По какой-то причине проверка боян не удается, и я получаю эти имена пользователей:

  • xxxyyy001
  • xxxyyy001
  • xxxyyy001

Can anyo ne объяснить, что происходит?

+1

форматирования имени пользователя с ведущими 0. поэтому ваше имя xxxyyy001, но сравнить его с xxxyyy1. поэтому ваши эгалы никогда не вернутся. ... вызовите метод equals с помощью 'String.format ("% s% s% 03d", p1, p2, p3)' – griFlo

+0

Вы проверяли, увеличивается ли p3? – Diabolus

ответ

3

Если хранить имена пользователей, используя% 03d, то есть с ведущими нулями, вы также должны использовать это, если сравнить строку в вашем userNameList:

userNameList.get(i).equals(String.format("%s%s%03d", p1, p2, p3)) 
+0

В этом случае! Благодаря :) –

0

как сказал в комментарии: вы храните ваше имя не так же, как вы его сравниваете. вы также можете изменить ваш метод следующим образом:

String p1 = "xxx"; //First 3 chars in first name 
    String p2 = "yyy"; //First 3 chars in last name 
    int p3 = 1;   //Unique identifier. 


    while(true){ 
     if(userNamesList.contains(String.format("%s%s%03d", p1, p2, p3))){ 
      p3++; 
     } 
     else{ 
      return String.format("%s%s%03d", p1, p2, p3); 
     }  
    } 
Смежные вопросы