Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更有效的分割字符串的方法_Java_Split_Date Parsing_Dayofmonth - Fatal编程技术网

Java 更有效的分割字符串的方法

Java 更有效的分割字符串的方法,java,split,date-parsing,dayofmonth,Java,Split,Date Parsing,Dayofmonth,我想了很久了。有没有一种方法可以在两个关键字标识符之间正确分割,而不需要冗余分割?例如,我们有文本: String text = "ASD WORD-BE HERE YUP"; 我们想提取“BE”。所以我们要做两次分割 String extractedWord = text.split(" ")[1].split("-")[1]; 在不知道确切的正则表达式的情况下,有没有更好的方法来实现这一点?我正在开发一个用于读取pdf的解析器,我想我的正则表达式可能是一个日期,但有一个未格式化的日期,所

我想了很久了。有没有一种方法可以在两个关键字标识符之间正确分割,而不需要冗余分割?例如,我们有文本:

String text = "ASD WORD-BE HERE YUP";
我们想提取“BE”。所以我们要做两次分割

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

在不知道确切的正则表达式的情况下,有没有更好的方法来实现这一点?我正在开发一个用于读取pdf的解析器,我想我的正则表达式可能是一个日期,但有一个未格式化的日期,所以我必须特别查找“月、日、年”,这对于正则表达式来说有点难设置。谢谢

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

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");

代码的一个潜在问题是,您总是假设输入是有效的(这对于您的用例来说可能很好),也就是说,在索引到字符串中之前,您从未检查字符串分割返回的数组的长度。

您是否尝试过设置这样的正则表达式?我尝试过放置一些更相关的标记。请检查。如果您真的关心效率,您不应该在解析器中使用
split
和正则表达式。(这个问题带有过早优化的味道……)