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

Java实现buildDefinitionList生成HTML定义列表代码错误排查

问题背景

需要实现HtmlBuilder类的静态方法buildDefinitionList(),功能规则如下:

  • 接收二维字符串数组格式的定义集合作为入参,每个子数组固定长度为2,依次存储术语名称、术语对应解释
  • 方法返回拼接完成的HTML定义列表字符串,使用<dl>、<dt>、<dd>标签实现
  • 如果传入的数组为空(长度为0),直接返回空字符串

入参示例:

String[][] definitions = {
  {"Bulb", "Bulge, thickening on the surface of something"},
  {"Beaver", "An animal from the order of rodents"},
};
HtmlBuilder.buildDefinitionList(definitions);

对应预期返回结果:

<dl><dt>Bulb</dt><dd>Bulge, thickening on the surface of something</dd><dt>Beaver</dt><dd>An animal from the order of rodents</dd></dl>
现有实现问题

当前提交的实现代码如下,运行结果不符合预期:

package com.arrays.problem6;

public class HtmlBuilder {

    public static void main(String[] args) {
    }

    public static String buildDefinitionList(String[][] definitions){
        var result = new StringBuilder();
        result.append("<dl><dt>");
        
        for (var item : definitions) {
         
            result.append("<dd>");
            result.append(item);
            result.append("</dl></dd>");
        }
        result.append("</dl></dd>");
       
        return result.toString();
    }
}

代码存在的具体问题:

  • 缺失空入参判断:数组为空时仍然会拼接<dl>相关标签,不符合空数组返回空字符串的要求
  • 标签拼接逻辑混乱:
    1. 初始化StringBuilder时就拼接了<dl><dt>,但循环中既没有为每个术语单独生成<dt>标签,也没有对应闭合</dt>的逻辑
    2. 循环中直接拼接item对象:item是String[]类型,直接append会输出数组对象的内存地址字符串,无法获取子数组中存储的术语、解释内容
    3. 闭合标签位置错误:</dl>是列表的根闭合标签,应该在所有列表项拼接完成后只添加1次,原代码在循环内、循环外多次拼接该标签,还额外多拼了无效的</dd>标签,导致标签嵌套完全错误
修正后代码

按照HTML定义列表的结构规则调整拼接逻辑,修正后代码如下:

package com.arrays.problem6;

public class HtmlBuilder {

    public static void main(String[] args) {
    }

    public static String buildDefinitionList(String[][] definitions){
        // 空数组场景直接返回空字符串
        if (definitions.length == 0) {
            return "";
        }
        StringBuilder result = new StringBuilder();
        result.append("<dl>");

        for (String[] item : definitions) {
            // 拼接术语名称
            result.append("<dt>").append(item[0]).append("</dt>");
            // 拼接术语解释
            result.append("<dd>").append(item[1]).append("</dd>");
        }
        // 所有列表项拼接完成后闭合根标签
        result.append("</dl>");

        return result.toString();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:30:45