返回格式化的字符串无法正常工作

时间:2015-06-10 13:18:57

标签: java format return duplicates string.format

我创建了一个欺骗检查,确保新创建的用户名是唯一的。

看起来像这样:

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

有人可以解释发生了什么吗?

2 个答案:

答案 0 :(得分:3)

如果使用%03d存储用户名,即使用前导零,则在比较userNameList中的字符串时也应使用此项:

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

答案 1 :(得分: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);
        }       
    }