拆分字符串的更有效方法

more efficient way to split string

想了很久。有没有办法在没有冗余拆分的情况下正确拆分两个关键字标识符?例如我们有文本:

String text = "ASD WORD-BE HERE YUP";

我们要提取 "BE"。所以我们会做两次拆分。

String extractedWord = text.split(" ")[1].split("-")[1];

有没有更好的方法在不知道确切的正则表达式的情况下做到这一点?我正在开发一个读取 pdf 的解析器,我想我的正则表达式可能是一个日期,但有一个未格式化的日期,所以我必须专门寻找 "MONTH - MONTH, DAY, YEAR" ,这对于正则表达式来说有点难以设置。谢谢!

一个选项是正则表达式捕获组。不幸的是,它最终变成了更多代码:

var pattern = Pattern.compile("-(.*?)\s");
var matcher = pattern.matcher("ASD WORD-BE HERE YUP");
var extracted = matcher.find() ? matcher.group(1) : null;

assert extracted.equals("BE");

你的代码的一个潜在问题是你总是假设输入是有效的(这可能适合你的用例),即你在索引到它们之前从不检查 String#split 返回的数组的长度。