有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在映射上迭代,上一次迭代除外

我有下一个映射值:

{title=varchar(50), text=text}

我试图将其转换为两个字符串,如下所示:

StringBuffer string = new StringBuffer();
for (String keyinside: values.keySet()) {
    string.append(keyinside + " " + values.get(keyinside) + ", ");
}

但我想要的是在这里,而不是在最后一次迭代中。我怎么做


共 (5) 个答案

  1. # 1 楼答案

    使用一些指标:

    StringBuffer string = new StringBuffer();
    boolean first = true;
    for (String keyinside: values.keySet()) {
        if (!first)
            string.append (", ");
        else
            first = false;
        string.append(keyinside + " " + values.get(keyinside));
    }
    

    顺便说一句,使用StringBuilder更有效(假设您不需要线程安全性)

  2. # 2 楼答案

    我很喜欢谷歌收藏库中的Joiner。你可以这样做:

    on(",").withKeyValueSeparator(" ").join(values);
    

    on是从com.google.common.base.Joiner静态导入的

    如果使用Maven,只需添加一个依赖项:

    <dependency>
        <groupId>com.google.collections</groupId>
        <artifactId>google-collections</artifactId>
        <version>1.0</version>
    </dependency>
    
  3. # 3 楼答案

    取一个在每次迭代中递增的计数器,并获取一个if条件,该条件检查它是否在最后一次迭代

    一个简单的技巧是

            int i = 0 ;
            for (String keyinside: values.keySet()) {
                string.append(keyinside + " " + values.get(keyinside));
                if((i+1)<values.keySet().size()){
                    string.append(", ");
                }
                i++;
            }
    

    另外,如果线程安全不是一个问题,我建议您使用StringBuilder

  4. # 4 楼答案

    简短的java 8备选方案:

    String result = values.entrySet().stream().map(e -> e.getKey() + " " + e.getValue())
                             .collect(Collectors.joining(", "))
    

    Stream.map()将映射中的所有条目转换为该条目的字符串描述

    注意,Java8最后还添加了函数String.join()

  5. # 5 楼答案

    你可以试试这个。通过它我们可以删除结尾处的逗号(,)。 希望这对你有帮助

        Map<String,String> s= new LinkedHashMap<String,String>();
        s.put("1", "A");
        s.put("2", "B");
        s.put("3", "C");
        StringBuffer sb = new StringBuffer();
        String ans=null;
        for (String keyinside: s.keySet()) {
             sb.append(keyinside + " " + s.get(keyinside) + ", ").toString();
        } 
        System.out.println(sb);
        ans=sb.substring(0, sb.length()-2).toString();
        System.out.println(ans);
    

    注意:您可以参考How to remove the last character from a string?