Java中将HTML表格字符串转换为指定格式普通文本的需求
HTML表格字符串转规范普通文本的Java实现方法
需求说明
将给定的包含HTML表格结构的Java字符串,转换为格式规整的普通文本,要求处理空行、调整大小写、补充标点并合并指定行。
实现方案(推荐使用Jsoup库)
Jsoup是Java生态中处理HTML解析的成熟库,能自动修复不规范的HTML标签,比正则表达式更可靠。
1. 添加依赖(Maven)
如果使用Maven管理项目,先在pom.xml中添加Jsoup依赖:
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.17.2</version> <!-- 可替换为最新稳定版 --> </dependency>
2. 核心代码实现
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class HtmlTableConverter { public static void main(String[] args) { String htmlStr = "<table><tr><td>ALL,</td></tr><tr><td></td></tr><tr><td> Please find attached file for this week<tr><td></td></tr><tr><td>Thanks</td></tr><tr><td>Support Team</td></tr>"; // 解析HTML,自动修复不闭合标签 Document doc = Jsoup.parse(htmlStr); Elements tdElements = doc.select("td"); StringBuilder textBuilder = new StringBuilder(); int validLineIndex = 0; for (Element td : tdElements) { String rawText = td.text().trim(); // 跳过空内容的单元格 if (rawText.isEmpty()) { continue; } validLineIndex++; switch (validLineIndex) { case 1: // 首字母大写,其余小写(适配原文本ALL, 转为All,) String formattedFirstLine = rawText.substring(0, 1).toUpperCase() + rawText.substring(1).toLowerCase(); textBuilder.append(formattedFirstLine).append("\n\n"); break; case 2: // 补充结尾句号 String secondLine = rawText.endsWith(".") ? rawText : rawText + "."; textBuilder.append(secondLine).append("\n\n"); break; case 3: // 第三行(Thanks)后面加逗号换行 textBuilder.append(rawText).append(",\n"); break; case 4: // 第四行(Support Team)直接追加 textBuilder.append(rawText); break; } } // 输出最终结果 System.out.println(textBuilder.toString()); } }
代码说明
- HTML解析:Jsoup会自动修复原字符串中未闭合的
<tr>标签,避免解析异常。 - 文本过滤:修剪每个
<td>的文本内容,跳过空单元格,排除无效空行。 - 格式调整:针对不同行的需求做个性化处理,包括大小写转换、标点补充、行合并。
无第三方库的正则实现(仅适用于简单场景)
如果不想引入第三方库,可尝试正则表达式(注意:仅适配当前特定HTML结构,复杂HTML容易失效):
public class RegexConverter { public static void main(String[] args) { String htmlStr = "<table><tr><td>ALL,</td></tr><tr><td></td></tr><tr><td> Please find attached file for this week<tr><td></td></tr><tr><td>Thanks</td></tr><tr><td>Support Team</td></tr>"; // 提取所有td中的文本 String[] texts = htmlStr.replaceAll("<[^>]+>", " ").trim().split("\\s{2,}"); StringBuilder textBuilder = new StringBuilder(); // 处理第一行 textBuilder.append(texts[0].substring(0,1).toUpperCase()).append(texts[0].substring(1).toLowerCase()).append("\n\n"); // 处理第二行 textBuilder.append(texts[1].trim()).append(".\n\n"); // 处理最后两行 textBuilder.append(texts[2]).append(",\n").append(texts[3]); System.out.println(textBuilder.toString()); } }
注意:正则方案仅适用于当前给定的简单HTML结构,若HTML标签嵌套复杂或格式不规范,容易出现解析错误,优先推荐Jsoup方案。
内容的提问来源于stack exchange,提问作者Rims
相关产品推荐
相关产品推荐

