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