Java For循环仅返回第一项上的值

Java For循环仅返回第一项上的值,java,Java,下面的代码以字符串类型返回一组ID。然后我将每个ID从字符串中分离出来,并将它们传递给另一个方法以将其转换为名称。但只有第一个ID被转换,而其余ID保持原样 String units = FolderUtil.getInstance().getUnits(folderId); // returns string of IDs seperated by comma 单元的示例如下(ID的数量可能不同): 让我们假设我同意这个观点: String u

下面的代码以字符串类型返回一组ID。然后我将每个ID从字符串中分离出来,并将它们传递给另一个方法以将其转换为名称。但只有第一个ID被转换,而其余ID保持原样

    String units = FolderUtil.getInstance().getUnits(folderId);
        // returns string of IDs seperated by comma
单元的示例如下(ID的数量可能不同):

让我们假设我同意这个观点:

            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]);
            }
相反,我看到:

 [unit-one, 56e12fc4-97b3-44e7-b59a-5df0267424ac, e95cdfcb-14d6-4065-a69d-8f0213e1f8b4]
如何将每个ID作为单位名称

谢谢各位。在我看到这些最新的帖子之前,我就知道了。通过将ID分解,看看当第一个ID不存在时,第二个或第三个ID是否至少会转换为名称。就在那时,我注意到了一个简单的问题,即空白导致它无法工作

            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. 
            }
String units=FolderUtil.getInstance().getUnits(folderId);
//返回以逗号分隔的ID字符串
字符串units2=units.substring(1,units.length()-1);
字符串[]units3=units2.split(“,”);
String[]convertedArray=新字符串[units3.length];
对于(int i=0;i

非常感谢大家

在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(",");

在for循环中,您正在创建一个仅在循环本身中可见的变量。要使其可见(或“在范围内”),您需要在循环之外声明它

String unitName = null;
for (String str : units3) {
   unitName = UnitRepository.getUnitName(str);
}
// You can use "unitName" outside the loop
尽管这个循环有点毫无意义,因为变量总是被分配给最后一个元素,并将替换以前的值,所以您需要优化逻辑。

String units=FolderUtil.getInstance().getUnits(folderId);
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字符串 字符串units2=units.substring(1,units.length()-1); 字符串[]units3=units2.split(“,”); String[]convertedArray=新字符串[units3.length()]; 对于(int i=0;i
您的输入字符串
单位
在每个逗号后都有空格,这导致查找失败。如果检查
unit3
的值,您将看到:

unit3[0]="97ec2452-4460-4796-a3a4-38fba1ab8ffc"
unit3[1]=" 56e12fc4-97b3-44e7-b59a-5df0267424ac"
unit3[2]=" e95cdfcb-14d6-4065-a69d-8f0213e1f8b4"
以下是几个选项:

  • String[]units3=units2.split(“,”)
    但要意识到,如果逗号后没有空格,则此操作将失败
  • convertedArray[i]=UnitRepository.getUnitName(units3[i].trim())
    where将删除该值周围的任何额外whitepsace,这将使单元名称正确解析

  • 由于无法理解为什么人们会对您的代码的范围和错误进行评论,我只是简单地复制了它,它是有效的:

    public class Example {
    
        static String getUnits() {
            return 
                       "@"    //character expected to be removed in substring()
                       +"97ec2452-4460-4796-a3a4-38fba1ab8ffc"
                       +","
                       +"56e12fc4-97b3-44e7-b59a-5df0267424ac"
                       +","
                       +"e95cdfcb-14d6-4065-a69d-8f0213e1f8b4"
                       +"@";   //character expected to be removed in substring()                        
        }
    
        static String getUnitName(String id) {
            switch(id) {
                case "97ec2452-4460-4796-a3a4-38fba1ab8ffc" :return "unit-one";
                case "56e12fc4-97b3-44e7-b59a-5df0267424ac" :return "unit-two";
                default: return "unit-three";
            }
        }
    
        public static void main(String[] args) {
            String units = getUnits();
    
            String units2 = units.substring(1, units.length()-1); // remove bad characters from getUnits string
            String [] units3 = units2.split(",");
            String [] convertedArray = new String[units3.length];
    
            for (int i = 0; i < units3.length; i++) {
                convertedArray[i] = getUnitName(units3[i]);
            }
            for(String name: convertedArray) {
                System.out.println(name);
            }
        }
    }
    
    在我看来,您需要知道从
    getUnits()
    方法中得到的确切信息,以及在执行
    substring()
    split()
    之后剩下的信息,以及如果您传递了
    UnitsRepository
    中不存在的ID,那么
    getUnitName()
    的行为

    如果您担心字符串两侧的空格,可以使用
    units.replaceAll(“,”)删除所有空格
    而不是调用
    子字符串()
    ,如您所见,如果您将
    units.length()-1
    作为第二个参数传递,它实际上会删除最后一个字符。如果要保留最后一个字符,只需使用
    units.length()
    ,因为该方法的javadoc说明:

        * @param      beginIndex   the beginning index, inclusive.
        * @param      endIndex     the ending index, **exclusive**.
    public String substring(int beginIndex, int endIndex)
    
    在调用getUnitName()时尝试:


    另外,开始时“units”的值是多少?我想您应该使用“+=”而不是“=”。运算符+对于参数类型是未定义的String@Jason将
    =+
    更改为
    +=
    ,或者更好地使用
    StringBuilder
    及其
    append
    方法。还要看一下Java8中引入的
    String.join(分隔符,元素)
    StringJoiner
    类。您没有解释您真正想要什么。顺便说一下,你用我的答案对你的帖子进行了编辑。@Jason,请看这里。我的回答是正确的。为什么要投否决票?
    public class Example {
    
        static String getUnits() {
            return 
                       "@"    //character expected to be removed in substring()
                       +"97ec2452-4460-4796-a3a4-38fba1ab8ffc"
                       +","
                       +"56e12fc4-97b3-44e7-b59a-5df0267424ac"
                       +","
                       +"e95cdfcb-14d6-4065-a69d-8f0213e1f8b4"
                       +"@";   //character expected to be removed in substring()                        
        }
    
        static String getUnitName(String id) {
            switch(id) {
                case "97ec2452-4460-4796-a3a4-38fba1ab8ffc" :return "unit-one";
                case "56e12fc4-97b3-44e7-b59a-5df0267424ac" :return "unit-two";
                default: return "unit-three";
            }
        }
    
        public static void main(String[] args) {
            String units = getUnits();
    
            String units2 = units.substring(1, units.length()-1); // remove bad characters from getUnits string
            String [] units3 = units2.split(",");
            String [] convertedArray = new String[units3.length];
    
            for (int i = 0; i < units3.length; i++) {
                convertedArray[i] = getUnitName(units3[i]);
            }
            for(String name: convertedArray) {
                System.out.println(name);
            }
        }
    }
    
    unit-one
    unit-two
    unit-three
    
        * @param      beginIndex   the beginning index, inclusive.
        * @param      endIndex     the ending index, **exclusive**.
    public String substring(int beginIndex, int endIndex)
    
    convertedArray[i] = UnitRepository.getUnitName(units3[i].trim());