java - 最好使用正则表达式或 Stringtokenizer 在此 : William Faulkner - 'Light In August' 中查找作者和书名

标签 java regex stringtokenizer

使用regexStringtokenizer来分隔此字符串中的作者和标题是否更好:

William Faulkner - 'Light In August'

这是最简单的正则表达式吗?

Pattern pattern = Pattern.compile("^\\s*([^-]+)-.*$");
Matcher matcher = pattern.matcher("William Faulkner - 'Light In August'");
String author = matcher.group(1).trim();
String bookTitle = matcher.group(2).trim();

这是否太过分了,或者是否有更简单的方法可以使用Stringtokenizer来做到这一点?

基本上,我正在寻找最透明和可维护的解决方案,因为我对正则表达式没有很好的理解,并且获得了上述解决方案的帮助。

最佳答案

您对输入有多少控制权?您能否保证作者和标题始终由 "- " (空格、破折号和空格)分隔?您确定作者不会包含"- "吗?等等。

如果输入相当严格,那么您可以简单地使用 String#split() ,这应该会让你非常清楚地知道你在做什么。 不要使用 StringTokenizer (source):

StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.

Mark Byers' answer向您展示如何使用 split()

但是,如果您必须担心输入中的更多变化(例如,破折号周围的空白数量是否可变或根本不存在?),那么使用正则表达式将变得简洁明了。权衡是代码的可读性和意图的清晰度。

关于java - 最好使用正则表达式或 Stringtokenizer 在此 : William Faulkner - 'Light In August' 中查找作者和书名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3962670/

相关文章:

java - 从 netty ByteBuf 获取字符串

java - 无法更新安卓应用

带有 REGEXP 的 PHP PDO 准备语句

regex - 如何使用正则表达式替换标签内 csv 中的双引号

java - 使用扫描仪和字符串标记器读取文件并检索邻接列表

java - 如何在Oracle中压缩XML(CLOB数据)?

特定模式的 Java 正则表达式

jquery - 在字符串中查找文本并添加到其他位置

java - java "stringtokenizer.nextToken(delimiter); "是如何工作的?

java - bufferedreader 不会移动到下一行