如何在HashMap值中获取String []数组的长度

时间:2014-04-09 23:43:51

标签: java hashmap

我正在创建一个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”

4 个答案:

答案 0 :(得分:2)

对于数组,访问length就好像它是实例变量,而不是方法。变化

for(int i=0;i<menu.get("main").length();i++)

for(int i=0;i<menu.get("main").length;i++)

Java Tutorial on arrays州:

  

最后,您可以使用内置的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 - 画廊