For循环仅返回第一项

时间:2016-02-27 00:59:17

标签: java

我有以下代码,它将一堆ID作为String类型返回。然后我将每个ID与String分开,并将它们传递给另一个方法,将其转换为名称。但只有第一个ID被转换,而其余的ID保持不变。

    String units = FolderUtil.getInstance().getUnits(folderId);
        // returns string of IDs seperated by comma

单位的一个例子是(ID的数量可能不同):

[97ec2452-4460-4796-a3a4-38fba1ab8ffc, 56e12fc4-97b3-44e7-b59a-5df0267424ac, e95cdfcb-14d6-4065-a69d-8f0213e1f8b4]


    String units2 = units.substring(1, units.length()-1);
    String [] units3 = units2.split(",");

    for (String str : units3) {
        String unitName = UnitRepository.getUnitName(str);
    }

所以我想说的是:

            String units = FolderUtil.getInstance().getUnits(folderId);
            // returns string of IDs seperated by comma

            String units2 = units.substring(1, units.length()-1);
            String [] units3 = units2.split(",");

            String[] convertedArray = new String[units3.length];
            for (int i = 0; i < units3.length; i++) {
                convertedArray[i] = UnitRepository.getUnitName(units3[i]);
            }

这仍然只会将第一个ID转换为单位名称。单位名称可能如下所示:

[unit-one, unit-two, unit-three]
而我正在看到:

 [unit-one, 56e12fc4-97b3-44e7-b59a-5df0267424ac, e95cdfcb-14d6-4065-a69d-8f0213e1f8b4]

如何将每个ID作为单位名称?

谢谢你们。在我看到这些最近的帖子之前,我确实弄明白了。通过断开ID来查看当第一个ID不存在时,他们的第二个或第三个是否至少会转换为name。那时我注意到白色空间的简单问题导致它不起作用。

            String units = FolderUtil.getInstance().getUnits(folderId);
            // returns string of IDs seperated by comma

            String units2 = units.substring(1, units.length()-1);
            String [] units3 = units2.split(",");

            String[] convertedArray = new String[units3.length];
            for (int i = 0; i < units3.length; i++) {
                convertedArray[i] = UnitRepository.getUnitName(units3[i].trim());  // .trim() fixes this. 
            }

非常感谢所有人。

6 个答案:

答案 0 :(得分:2)

在调用getUnitName()时尝试trim()

convertedArray[i] = UnitRepository.getUnitName(units3[i].trim());

答案 1 :(得分:1)

因为它位于你的代码将继续覆盖for循环的每次迭代的unitName的最后一个实例,只留下最后一个值可见...你想要连接它吗?

如果您想要连接,请尝试以下操作:

String units = FolderUtil.getInstance().getUnits(folderId);
// returns string of IDs seperated by comma

String units2 = units.substring(1, units.length()-1);
String [] units3 = units2.split(",");

String unitName;
for (String str : units3) {
    unitName += UnitRepository.getUnitName(str) + ",";
}
String[] ids = unitName.split(",");

答案 2 :(得分:1)

您的输入字符串units在每个逗号后面都有空格,导致查找失败。如果您检查unit3的值,您会看到:

unit3[0]="97ec2452-4460-4796-a3a4-38fba1ab8ffc"
unit3[1]=" 56e12fc4-97b3-44e7-b59a-5df0267424ac"
unit3[2]=" e95cdfcb-14d6-4065-a69d-8f0213e1f8b4"

以下是几个选项:

  1. String [] units3 = units2.split(", ");但是意识到在逗号后面没有空格的情况下会失败。
  2. convertedArray[i] = UnitRepository.getUnitName(units3[i].trim());其中trim()将删除值周围的任何额外whitepsace,这应该使单位名称能够正确解析。

答案 3 :(得分:1)

无法理解为什么人们对您的代码的范围和错误发表评论我只是简单地复制了它,并且它有效:

unit-one
unit-two
unit-three

当你运行main时,它会产生:

getUnits()

在我看来,您需要知道从substring()方法获得了什么,以及在执行split()getUnitName()之后您还剩下什么,以及该方法的行为是什么UnitsRepository如果您传递units.replaceAll(" ", "");中不存在的ID。

如果您担心字符串两侧的空格,您可以使用substring()完全删除所有空格,而不是调用units.length()-1,如您所见,实际上会删除最后一个字符units.length()传递 * @param beginIndex the beginning index, inclusive. * @param endIndex the ending index, **exclusive**. public String substring(int beginIndex, int endIndex) 作为第二个参数。如果你想保留最后一个字符,你应该只使用{{1}},因为该方法的javadoc说:

{{1}}

答案 4 :(得分:-1)

String units = FolderUtil.getInstance().getUnits(folderId);
// returns string of IDs seperated by comma

String units2 = units.substring(1, units.length()-1);
String [] units3 = units2.split(",");

String[] convertedArray = new String[units3.length()];
for (int i = 0; i < units3.length(); i++) {
    convertedArray[i] = UnitRepository.getUnitName(units3[i]);
}

答案 5 :(得分:-2)

在for循环中,您创建的变量只能在循环中显示。为了使其可见(或在范围&#34;中),您需要在循环外声明它。

String unitName = null;
for (String str : units3) {
   unitName = UnitRepository.getUnitName(str);
}
// You can use "unitName" outside the loop

虽然这个循环有点无意义,因为变量将始终分配给最后一个元素并将替换之前的值,因此您需要优化逻辑。