我需要从MERIA
创建的字符串列表中保存枚举值(在这种情况下为SMI
和split()
。
这是我所拥有的:
public AccessLevel[] getAccess() {
String Access = "MERIA : SMI";
String[] split = Access.split(" : ");
for (String Acces : split) {
list.add(AccessLevel.valueOf(Acces));
}
return new AccessLevel[]{AccessLevel.MERIA,AccessLevel.NONE};
}
我想要这样的东西,将列表中的枚举参数保存到数组中:
public AccessLevel[] getAccess() {
String Access = "MERIA : SMI";
String[] split = Access.split(" : ");
for (String Acces : split) {
list.add(AccessLevel.valueOf(Acces));
}
return new AccessLevel[]{list};
}
答案 0 :(得分:3)
您的代码有很多问题:
Access
应该是access
但主要
list
不存在,因此您应该创建一个变量。public AccessLevel[] getAccess() {
String accessesString = "MERIA : SMI";
String[] split = accessesString.split(" : ");
AccessLevel[] list = new AccessLevel[split.length];
for (int i = 0; i < split.length; i++) {
list[i] = AccessLevel.valueOf(split[i]);
}
return list;
}
您应该真正使用List而不是基本数组,它们更加通用并且更易于使用。
public List<AccessLevel> getAccess() {
String accessesString = "MERIA : SMI";
String[] split = accessesString.split(" : ");
List<AccessLevel> list = new ArrayList<>();
for (String access : split) {
list.add(AccessLevel.valueOf(access));
}
return list;
}
我认为最优雅的解决方案,但可能要困难一些。
public List<AccessLevel> getAccess() {
String accessesString = "MERIA : SMI";
String[] split = accessesString.split(" : ");
return Arrays.stream(split)
.map(AccessLevel::valueOf)
.collect(Collectors.toList());
}
我希望这会有所帮助! 格里茨
答案 1 :(得分:2)
使用长度split.length
创建一个新数组。
public AccessLevel[] getAccess() {
String access = "MERIA : SMI";
String[] split = access.split("\\s*:\\s*");
AccessLevel[] accessLevels = new AccessLevel[split.length];
for (int i = 0; i < split.length; i++) {
accessLevels[i] = AccessLevel.valueOf(split[i]);
}
return accessLevels;
}
还要注意,我将" : "
更改为"\\s*:\\s*"
以适应任意数量的空格。或者,您可以使用String.trim()
。
并且Java中的非最终变量名称以小写字母开头。
或者您可以使用Stream API:-
public AccessLevel[] getAccess() {
String access = "MERIA : SMI";
return Arrays.stream(access.split(":"))
.map(String::trim)
.map(AccessLevel::valueOf)
.toArray(AccessLevel[]::new);
}