为例)
" />
本文讲解在Java中解析嵌入式XML片段时,因未指定目标字符串导致indexOf()返回-1、进而引发StringIndexOutOfBoundsException的常见错误,并提供安全、可复用的解析方案。
本文讲解在java中解析嵌入式xml片段时,因未指定目标字符串导致`indexof()`返回-1、进而引发`stringindexoutofboundsexception`的常见错误,并提供安全、可复用的解析方案。
在处理结构化数据时,开发者有时会将轻量级XML片段(如
根本原因在于:原始代码中多次调用了 fileLines.indexOf(...),而 List
int beginIndex = fileLines.indexOf("<price>"); // ❌ 错误:返回的是某一行的下标(如第2行),不是子串位置!
int endIndex = fileLines.indexOf("</price>"); // ❌ 同上,且很可能找不到,返回-1
当 endIndex 为 -1 时,substring(begin, -1) 必然失败。
✅ 正确做法是:所有 indexOf() 和 substring() 操作必须作用于当前待解析的单行字符串,即 fileLines.get(i):
private static void buildGUIFile() throws IOException {
List<string> fileLines = Files.readAllLines(fileName);
for (int i = 0; i ");
int pei = line.indexOf("");
// 安全检查:确保起始/结束标签均存在且顺序合理
if (psi != -1 && pei != -1 && psi ".length(), pei);
System.out.println("Parsed Price: " + price); // 输出:$18.38
} else {
System.err.println("Warning: Invalid or malformed <price> tag in line " + (i + 1));
}
}
}</price></string>
⚠️ 重要注意事项:
- 不要依赖 "
".trim().length() —— 字符串字面量无需 trim(); - 避免重复调用 line.indexOf() 多次(性能冗余),应缓存结果;
- 必须校验 indexOf() 返回值是否为 -1,否则 substring() 会崩溃;
- 此方法仅适用于格式高度可控、无嵌套/转义/注释的简单XML片段;生产环境推荐使用 javax.xml.parsers.DocumentBuilder 或轻量库(如 Jsoup)解析标准XML。
? 扩展建议:若需批量提取多个字段(如 Product、href),可封装为通用方法:
private static String extractTagContent(String xmlLine, String tag) {
String start = "";
String end = "" + tag + ">";
int s = xmlLine.indexOf(start);
int e = xmlLine.indexOf(end);
return (s != -1 && e != -1 && s <p>掌握“操作对象明确性”这一原则,能有效规避90%以上的字符串解析类异常。</p>











