循环计数字符串值[重复]

Posted

技术标签:

【中文标题】循环计数字符串值[重复]【英文标题】:Loop through a counting String value [duplicate] 【发布时间】:2013-11-28 19:40:11 【问题描述】:

我必须显示v10000v10500 范围内的所有服务器名称。 下面是我尝试过的代码,但有时它显示为零。

String template = "v10";
int count = 0;

while (count < 501) 
  String number;        
  if (count < 100) 
    number = "00" + Integer.toString(count);
   else if(count < 10) 
    number = "0" + Integer.toString(count);
   else 
    number = Integer.toString(count);
  
  String server = template + number;
  System.out.println(server);
  count++;

但是当我向老板展示这个解决方案时,他只是笑着说:

我可以做得更好。

如何更改我的代码以使其正常工作?我是 Java 新手。

【问题讨论】:

切换你的 if else/if 左右。 count &lt; 10 位于顶部,count &lt; 100 位于底部 你需要一个更有帮助的老板。 总是首先检查最低值,否则它将永远无法进行该测试(9 小于 100 且小于 10,因此您将进入小于 100。我现在将代码更改为小于首先是 10。此外,对于 10 以下的值,您添加 2 个零,对于 100 以下的值,您只添加 1 个零,这样所有值都将有 3 个数字 :-) @RobChurch 你是对的。老年人/老板应该更有帮助。 【参考方案1】:

我愿意

for(int i = 10000; i <= 10500; i++)
    System.out.println("v" + i);

【讨论】:

请把 这就是我要写的……【参考方案2】:

这是一条很长的路。更好地使用String.format() 一个可行的解决方案是:

for (int i = 0; i <= 500; i++) 
    String server = String.format("v10%03d", i);
    System.out.println(server);

格式字符串是这样构建的:v10 -> 服务器的字符串模板%0 --> 你需要的零3d --> 三位数将被添加

所以你的 int i 将被这样格式化。

【讨论】:

使用 String.format 非常昂贵,而且有点复杂。恕我直言。 @PeterLawrey:总的来说,String.format 是一个强大而好的解决方案。但就 OP 的问题而言,您的答案会更合适。 @dTDesign:就我而言,彼得的解决方案更好。但我会牢记字符串格式。为此 +1 我同意 String.format 是一种更灵活的解决方案,注意这一点很有用。【参考方案3】:

所有其他答案都提出了解决此问题的更好方法。我打算自己建议使用格式,但是从 10000 开始的循环也可以:

for (int i = 0; i <= 500; i++) 
    String server = String.format("v10%03d", i);
    System.out.println(server);

或者简单(并且更快):

for(int i = 10000; i <= 10500; i++) 
    System.out.println("v" + i);

但我认为我们也应该修复 OP 代码中的错误:

while (count < 501)
    String number;

    if(count < 100)
        number = "00" + Integer.toString(count);
    else if(count < 10)
        number = "0" + Integer.toString(count);
    else
        number = Integer.toString(count);
    
    String server = template + number;
    System.out.println(server);
    count++;

我建议改用 for 循环,但这不是问题。问题是测试的顺序。如果count &lt; 100 为假,那么count &lt; 10 也为假。你永远不会进入这个街区。切换 if 语句的顺序。

所以固定代码:

for (int count = 0; count <= 500; count++)
    String number;

    if(count < 10)
        number = "00" + Integer.toString(count);
    else if(count < 100)
        number = "0" + Integer.toString(count);
    else
        number = Integer.toString(count);
    
    String server = template + number;
    System.out.println(server);

【讨论】:

我最喜欢你的第一个解决方案。它实用,显示意图并且易于扩展/重用。【参考方案4】:

只需使用for 循环:

for(int i = 10000; i <= 10500; i++)
    System.out.println("v" + i);

【讨论】:

晚了几秒钟!【参考方案5】:
        String template = "v";
        for(int i=10000;i<=10500;i++)
            System.out.println(template+i);
        

【讨论】:

【参考方案6】:

在 for 循环中使用 String.format:

for (int i = 10000; i <= 10500; ++i) 
    System.out.println(String.format("v%d", i));

这将计算这些整数,并在每个整数前面加上一个“v”。

【讨论】:

【参考方案7】:

您可以从 10000 到 10500 执行 for 并使用各种解决方案将 int(或您使用的任何数字类型)转换为字符串,例如Integer.toString().

然后您可以使用StringBuilder 连接"v" 和您的结果。

【讨论】:

以上是关于循环计数字符串值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

减少计数值以重复循环循环不起作用。 python中的for循环有一个异常处理程序,它有一个continue语句

将for循环中的字符串值添加到列表中[重复]

如何在perl中的foreach循环中的字符串中查找和删除重复值的出现

vb中的循环语句

C++ While循环不重新分配字符串值

字符串重复计数