【问题标题】:Returning a formatted string does not working properly返回格式化的字符串无法正常工作
【发布时间】:2015-06-10 13:18:57
【问题描述】:

我创建了一个重复检查,以确保新创建的用户名是唯一的。

看起来像这样:

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

谁能解释发生了什么?

【问题讨论】:

  • 你用前导 0 格式化你的用户名。所以你的名字是 xxxyyy001,但你将它与 xxxyyy1 进行比较。所以你的 eqals 永远不会返回 true。 ... 使用 'String.format("%s%s%03d", p1, p2, p3)' 调用您的 equals 方法
  • 你检查过 p3 是否在增加吗?

标签: java format return duplicates string.format


【解决方案1】:

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

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

【讨论】:

  • 原来如此!谢谢:)
【解决方案2】:

就像评论中所说的那样:您存储名字的方式与比较它的方式不同。 你也可以这样改变你的方法:

    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);
        }       
    } 

【讨论】:

    猜你喜欢
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多