我正在创建一个HashMap,将菜单名称作为String []数组存储为Map的值。例如:
Map<String, String[]> menu = new HashMap<String, String[]>();
String[] main = {"home", "news", "gallery"};
String[] user = {"profile", "messages"};
String[] admin = {"users", "stats"};
menu.put("main", main);
menu.put("user", user);
menu.put("admin", admin);
main,user和admin数组将保存数据库中的数据,但我现在已将静态数据放入测试中。我需要通过获取值字符串的长度来遍历每个键的值数组。例如:
for(int i=0;i<menu.get("main").length();i++)
{
System.out.println(menu.get("main")[i]);
}
编译器抱怨这行代码:menu.get(“main”)。length() - 找不到方法。
如果我使用像(int i = 0; i&lt; 2; i ++)这样的固定迭代,它可以正常工作。
问题是正确获取menu.get(“main”)。length()的长度!
修改
我实际上是在JSP页面中使用JSTL打印结果,如下所示:
<c:set var="main_menu" value="${view.getMenu().get('main')}" />
<c:forEach var="i" begin="0" end="${main_menu.length}">
<c:out value="${main_menu[i]}" />
</c:forEach>
我从tomcat收到错误说:java.lang.NumberFormatException:对于输入字符串:“length”
答案 0 :(得分:2)
对于数组,访问length
就好像它是实例变量,而不是方法。变化
for(int i=0;i<menu.get("main").length();i++)
到
for(int i=0;i<menu.get("main").length;i++)
最后,您可以使用内置的length属性来确定任何数组的大小。以下代码将数组的大小打印到标准输出:
System.out.println(anArray.length);
答案 1 :(得分:1)
length
是字段,而不是方法。此外,你不应该反复调用get()
,将值存储在某个地方:
String[] value = menu.get("main");
for (int i = 0; i < value.length; i++) { // notice it's not `length()`
System.out.println(value[i]);
}
您还可以使用for-each:
for (String a : value) {
System.out.println(a);
}
答案 2 :(得分:1)
您的问题当然是length
之后的括号。但是,对于您正在做的事情,最好的方法是使用扩展的for循环。
for (String item : menu.get("main")) {
System.out.println(item);
}
修改强>
要在JSTL中执行此操作,您需要
<c:forEach var="item" items="${view.getMenu().get('main')}">
<c:out value="${item}" />
</c:forEach>
答案 3 :(得分:0)
@David已经回答了你的问题,但是如果你需要用索引(迭代号)迭代任何场景,你可以这样做:
<c:forEach var="item" items="${view.getMenu().get('main')}" varStatus="itemStatus">
<c:out value="${itemStatus.index}" /> - <c:out value="${item}" />
</c:forEach>
其中“varStatus”循环标记有两个字段:index和count。 index 从0开始编号,以(收集长度 - 1)结束; count 从1开始编号,以(收集长度)结束
上述内容将打印为:
1 - 家庭
2 - 新闻
3 - 画廊