You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何避免硬编码数组索引,动态构建目标HTML字符串?

如何避免硬编码数组索引生成指定结构的HTML字符串

我有一段Java代码,通过分隔符拆分字符串得到4个元素的数组,想要生成如下结构的HTML字符串:

result = "<div class=\"parent\"> <div class=\"heading\">"+arr[0]+"</div> <div class=\"heading\">"+arr[1]+"</div></div><div class=\"parent\"> <div class=\"resultname\">"+arr[2]+"</div> <div class=\"resultname\">"+arr[3]+"</div></div>";

但不想硬编码arr[0]、arr[1]这类索引,之前尝试的for循环实现有问题,求更优的处理方式。原代码如下:

public class StringExtraction {
    public static void main(String[] args) {
        String str = "|555|777|AB|CD";
        String[] arr = str.substring(1).split("\\|");

        String result = "";
        //result = "<div class=\"parent\"> <div class=\"heading\">"+arr[0]+"</div> <div class=\"heading\">"+arr[1]+"</div></div><div class=\"parent\"> <div class=\"resultname\">"+arr[2]+"</div> <div class=\"resultname\">"+arr[3]+"</div></div>";

        System.out.println("Array length is :-> " + arr.length);
        for (String s1 : arr) {
            System.out.println("Value " + s1 + " and its length is " + s1.length());
        }

        for (int i = 0; i < arr.length; i++) {
            result = "<div class=\"parent\"> <div class=\"heading\">" + arr[i] + "</div> <div class=\"heading\">" + arr[i] + "</div></div><div class=\"parent\"> <div class=\"resultname\">" + arr[i] + "</div> <div class=\"resultname\">" + arr[i] + "</div></div>";
        }

        System.out.println("Print Result below:");
        System.out.println(result);
    }
}

原代码问题分析

原循环的核心问题是:每次迭代都会覆盖result变量,最终只保留最后一个元素的重复内容,同时没有区分前两个元素用heading类、后两个用resultname类的逻辑,完全不符合预期需求。


解决方案

方案1:分批次遍历+StringBuilder高效拼接

用StringBuilder替代直接字符串拼接(避免频繁创建字符串对象,提升效率),分两组处理数组元素:前两个生成heading类型的div,后两个生成resultname类型的div,通过循环遍历指定范围的元素,彻底避免硬编码索引。

public class StringExtraction {
    public static void main(String[] args) {
        String str = "|555|777|AB|CD";
        String[] arr = str.substring(1).split("\\|");
        StringBuilder result = new StringBuilder();

        // 处理前两个元素,生成第一个parent块
        result.append("<div class=\"parent\">");
        for (int i = 0; i < 2; i++) {
            result.append(String.format(" <div class=\"heading\">%s</div>", arr[i]));
        }
        result.append("</div>");

        // 处理后两个元素,生成第二个parent块
        result.append("<div class=\"parent\">");
        for (int i = 2; i < arr.length; i++) {
            result.append(String.format(" <div class=\"resultname\">%s</div>", arr[i]));
        }
        result.append("</div>");

        System.out.println("Print Result below:");
        System.out.println(result.toString());
    }
}

方案2:封装复用方法,提升扩展性

如果后续可能调整分组数量或class名称,可以把生成parent块的逻辑封装成独立方法,进一步解耦代码,方便后续维护:

public class StringExtraction {
    public static void main(String[] args) {
        String str = "|555|777|AB|CD";
        String[] arr = str.substring(1).split("\\|");
        StringBuilder result = new StringBuilder();

        // 生成第一个parent块:取前2个元素,用heading类
        result.append(buildParentDiv(arr, 0, 2, "heading"));
        // 生成第二个parent块:取后2个元素,用resultname类
        result.append(buildParentDiv(arr, 2, arr.length, "resultname"));

        System.out.println("Print Result below:");
        System.out.println(result.toString());
    }

    // 封装生成parent div的工具方法
    private static String buildParentDiv(String[] arr, int start, int end, String childClass) {
        StringBuilder parent = new StringBuilder("<div class=\"parent\">");
        for (int i = start; i < end; i++) {
            parent.append(String.format(" <div class=\"%s\">%s</div>", childClass, arr[i]));
        }
        parent.append("</div>");
        return parent.toString();
    }
}

方案3:Java Stream简化遍历(Java 8+)

如果偏好函数式编程风格,可以用Stream截取数组片段并拼接结果,代码更简洁:

import java.util.Arrays;
import java.util.stream.Collectors;

public class StringExtraction {
    public static void main(String[] args) {
        String str = "|555|777|AB|CD";
        String[] arr = str.substring(1).split("\\|");

        // 生成heading组的HTML
        String headingParent = "<div class=\"parent\"> " +
                Arrays.stream(arr, 0, 2)
                      .map(item -> String.format("<div class=\"heading\">%s</div>", item))
                      .collect(Collectors.joining(" ")) +
                "</div>";

        // 生成resultname组的HTML
        String resultNameParent = "<div class=\"parent\"> " +
                Arrays.stream(arr, 2, arr.length)
                      .map(item -> String.format("<div class=\"resultname\">%s</div>", item))
                      .collect(Collectors.joining(" ")) +
                "</div>";

        String result = headingParent + resultNameParent;
        System.out.println("Print Result below:");
        System.out.println(result);
    }
}

内容的提问来源于stack exchange,提问作者Tan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 18:23:11