场景
我们经常需要从字符串中提取指定的值。
如果要设计一个平台,常见提取策略都要支持。从零实现起来会比较麻烦。
希望实现一个整合常见提取策略的工具,便于在各个场景复用。
值提取系列
字符串值提取工具-04-java 调用 java? Janino 编译工具
代码地址
可以考虑做的工具
根据值提取,实现一个转换工具,这样我们可以通过各种数据的处理,达到 ETL 的效果。
整体目标
希望支持的文本类别
xml
html
json
csv/逗号分隔==>split
plain-text
SQL?
对应的策略
xml==>xpath
json==>json-path
html==>jsoup
SQL==>JSqlParser
csv/指定符号分隔==>split
拓展
1) RegEx 正则表达式
3) grovvy 脚本
chat
介绍一下值提取,比如想从一个字符串,一个提取方式的输入框,获取到想提提取的值。
是的,有一些成熟的开源Java库可以帮助你进行字符串提取和解析。以下是几种常见且流行的解决方案:
1. Apache Commons Lang
Apache Commons Lang提供了大量实用的工具类,尤其是StringUtils类,可以方便地进行字符串操作。
import org.apache.commons.lang3.StringUtils;
public class StringExtractionExample {
public static void main(String[] args) {
String text = "OrderID: 12345, Customer: John Doe, Date: 2023-08-05";
String orderId = StringUtils.substringBetween(text, "OrderID: ", ", Customer: ");
String customer = StringUtils.substringBetween(text, "Customer: ", ", Date: ");
String date = StringUtils.substringAfter(text, "Date: ");
System.out.println("OrderID: " + orderId);
System.out.println("Customer: " + customer);
System.out.println("Date: " + date);
}
}
2. Regex (正则表达式)
Java内置了对正则表达式的支持,可以使用Pattern和Matcher类来进行字符串匹配和提取。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
public static void main(String[] args) {
String text = "OrderID: 12345, Customer: John Doe, Date: 2023-08-05";
String pattern = "OrderID: (\\d+), Customer: (.*?), Date: (\\d{4}-\\d{2}-\\d{2})";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(text);
if (m.find()) {
String orderId = m.group(1);
String customer = m.group(2);
String date = m.group(3);
System.out.println("OrderID: " + orderId);
System.out.println("Customer: " + customer);
System.out.println("Date: " + date);
} else {
System.out.println("NO MATCH");
}
}
}
3. Jackson
如果你的字符串格式是JSON格式,可以使用Jackson库来解析JSON字符串并提取值。
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonExample {
public static void main(String[] args) {
String jsonString = "{\"OrderID\": \"12345\", \"Customer\": \"John Doe\", \"Date\": \"2023-08-05\"}";
ObjectMapper mapper = new ObjectMapper();
try {
JsonNode root = mapper.readTree(jsonString);
String orderId = root.get("OrderID").asText();
String customer = root.get("Customer").asText();
String date = root.get("Date").asText();
System.out.println("OrderID: " + orderId);
System.out.println("Customer: " + customer);
System.out.println("Date: " + date);
} catch (Exception e) {
e.printStackTrace();
}
}
}
4. Jsoup
如果你需要从HTML文档中提取值,Jsoup是一个非常好的选择。
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
public class JsoupExample {
public static void main(String[] args) {
String html = "<div>OrderID: 12345</div><div>Customer: John Doe</div><div>Date: 2023-08-05</div>";
Document doc = Jsoup.parse(html);
String orderId = doc.select("div:contains(OrderID)").text().split(": ")[1];
String customer = doc.select("div:contains(Customer)").text().split(": ")[1];
String date = doc.select("div:contains(Date)").text().split(": ")[1];
System.out.println("OrderID: " + orderId);
System.out.println("Customer: " + customer);
System.out.println("Date: " + date);
}
}
这些开源库各有优势,选择哪一种取决于具体的使用场景和需求。
常见的文本格式 除了 xml json csv html properties,还有什么?
除了XML、JSON、CSV、HTML和Properties文件外,还有许多其他常见的文本格式,用于不同的应用场景和需求。以下是一些常见的文本格式:
1. YAML
YAML(YAML Ain’t Markup Language)是一种适合人类阅读的数据序列化格式,常用于配置文件和数据交换。
order:
id: 12345
customer: John Doe
date: 2023-08-05
2. INI
INI文件是一种简单的配置文件格式,通常用于初始化配置。每个条目分为节、键和值。
[order]
id = 12345
customer = John Doe
date = 2023-08-05
3. Markdown
Markdown是一种轻量级标记语言,用于格式化文档,特别适用于编写说明文档、README文件等。
# Order Details
- **Order ID**: 12345
- **Customer**: John Doe
- **Date**: 2023-08-05
4. TSV
TSV(Tab-Separated Values)类似于CSV,但使用制表符(Tab)作为分隔符。
OrderID Customer Date
12345 John Doe 2023-08-05
5. RTF
RTF(Rich Text Format)是一种用于文本文档的格式,支持文本样式和格式。
{\rtf1\ansi{\fonttbl\f0\fswiss Helvetica;}\f0\pard
OrderID: 12345 \par
Customer: John Doe \par
Date: 2023-08-05 \par
}
6. LaTeX
LaTeX是一种排版系统,用于生成高质量的文档,尤其是包含数学公式的文档。
\documentclass{article}
\begin{document}
OrderID: 12345 \\
Customer: John Doe \\
Date: 2023-08-05
\end{document}
7. TOML
TOML(Tom’s Obvious, Minimal Language)是一种用于配置文件的格式,设计目标是简单易读。
[order]
id = 12345
customer = "John Doe"
date = "2023-08-05"
8. SQL
SQL文件用于定义数据库的结构和查询数据。
INSERT INTO orders (id, customer, date) VALUES (12345, 'John Doe', '2023-08-05');
9. Log文件
日志文件用于记录系统或应用程序的运行状态、错误信息等。
2023-08-05 12:34:56 INFO OrderID: 12345, Customer: John Doe, Date: 2023-08-05
10. Shell Script
Shell脚本用于自动化任务,在Unix/Linux系统中广泛使用。
#!/bin/bash
order_id=12345
customer="John Doe"
date="2023-08-05"
echo "OrderID: $order_id, Customer: $customer, Date: $date"
这些格式各有其特定的应用场景,选择哪种格式取决于具体的需求和使用环境。