Java自动填充ArrayList,搜索更好的选项

时间:2016-01-07 21:02:38

标签: java

我在这里使用此代码自动使用obj文件的目录路径填充字符串数组列表,以便以后在动画中使用,但这有一个小问题:

private List<String> bunny_WalkCycle = new ArrayList<String>(); 
private int bunny_getWalkFrame = 0;

private void prepare_Bunny_WalkCycle() {

    String bunny_walkFrame = "/bunnyAnimation/bunnyFrame0.obj";

    while(bunny_WalkCycle.size() != 30) { // 30 obj files to loop through

        if(bunny_getWalkFrame != 0) {
            bunny_walkFrame = 
                "/bunnyAnimation/bunnyWalkAnim/bunnyWalkFrame_"+bunny_getWalkFrame+".obj";          
        }

        bunny_WalkCycle.add(bunny_getWalkFrame);

        bunny_getWalkFrame++;
    }
}

现在的问题是,动画的blender中的命名约定在实际数字之前是零,所以像这样:

bunnyWalkFrame_000001.obj
bunnyWalkFrame_000002.obj
bunnyWalkFrame_000003.obj
...
bunnyWalkFrame_000030.obj

使用我的prepare_Bunny_WalkCycle方法,我无法解释为零,所以我会更改名称并删除零..这可能没有那么多帧但是一旦我达到100帧就会变得痛苦..所以那里& #39;我的问题:

在代码中考虑零的智能方法是什么,而不是手动重命名每个文件并将其删除?

5 个答案:

答案 0 :(得分:3)

您可以使用String.format()用零填充数字:

String.format("%05d", yournumber);

答案 1 :(得分:3)

我认为您可以使用"String.format"解决问题:

String blenderNumber = String.format("%06d", bunny_getWalkFrame);

说明:

  • 0 - &gt;把前导零
  • 6 - &gt; &#34;宽度&#34;他们/他们的数量

所以这将是你的新bunny_walkFrame:

 bunny_walkFrame = "/bunnyAnimation/bunnyWalkAnim/bunnyWalkFrame_" + blenderNumber + ".obj";

答案 2 :(得分:1)

以下是两个选项。首先,您可以使用字符串格式化程序创建带有前导零的文件名:

bunny_WalkCycle.add("/bunnyAnimation/bunnyFrame0.obj");
for (int frame = 1; frame <= 30; frame++) {
    bunny_WalkCycle.add(
            String.format("/bunnyAnimation/bunnyWalkAnim/bunnyWalkFrame_%06s.obj", frame));
}

第二个选项是,如果您已经拥有目录中的所有必需文件,则可以一次性获取所有文件:

bunny_WalkCycle.add("/bunnyAnimation/bunnyFrame0.obj");
bunny_WalkCycle.addAll(Arrays.asList(new File("/bunnyAnimation/bunnyWalkAnim").list()));

答案 3 :(得分:1)

有两种方法可以做到这一点: 附加正确数量的前导零,或使用String格式化程序。

  1. bunny_walkFrame =&#34; / bunnyAnimation / bunnyWalkAnim / bunnyWalkFrame _&#34; + String.format(&#34;%05d&#34;,bunny_getWalkFrame)+&#34; .obj&#34;;
  2. OR

    1. bunny_walkFrame =&#34; / bunnyAnimation / bunnyWalkAnim / bunnyWalkFrame _&#34; + getLeadingZeroes(bunny_getWalkFrame)+ String.valueOf(bunny_getWalkFrame)+&#34; .obj&#34;;
    2. 其中

      private String getLeadingZeroes(int walk) {
          String zeroes = "";
          int countDigits = 0;
          while (walk > 0) {
              countDigits++;
              walk /= 10;
          }
          for (int i = 1; i <= (nZeroes - countDigits); i++) {
              zeroes += "0";
          }
          return zeroes;
      }
      

答案 4 :(得分:0)

这里你去:

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html

只需指定所需的位数即可。将其设置为一个。如果必须,它将推翻(因此它不会切断数字)