Java 最好使用正则表达式或Stringtokenizer来查找作者和书名:William Faulkner-';八月之光&x27;

Java 最好使用正则表达式或Stringtokenizer来查找作者和书名:William Faulkner-';八月之光&x27;,java,regex,stringtokenizer,Java,Regex,Stringtokenizer,使用regex或Stringtokenizer来分隔此字符串中的作者和标题是否更好: William Faulkner - 'Light In August' 这是最简单的正则表达式吗 Pattern pattern = Pattern.compile("^\\s*([^-]+)-.*$"); Matcher matcher = pattern.matcher("William Faulkner - 'Light In August'"); String author = matcher.gr

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

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


基本上,我正在寻找最透明、最可维护的解决方案,因为我对
regex
没有很好的理解,并且在上面的解决方案中得到了帮助。

这取决于输入的外观。例如,正则表达式在包含连字符的作者名称上失败

也许像

Pattern.compile("^\\s*(.*?)\\s+-\\s+'(.*)'\\s*$")

可能更合适一些。

这取决于输入的外观。例如,正则表达式在包含连字符的作者名称上失败

也许像

Pattern.compile("^\\s*(.*?)\\s+-\\s+'(.*)'\\s*$")

可能更合适一些。

使用
String.split怎么样

String s = "William Faulkner - 'Light In August'";
String[] parts = s.split(" - ", 2);
String author = parts[0];
String title = parts[1];


需要注意的一点是,一些作者的姓名和书名包含连字符,因此仅在连字符上拆分通常不起作用。

使用
String.split如何

String s = "William Faulkner - 'Light In August'";
String[] parts = s.split(" - ", 2);
String author = parts[0];
String title = parts[1];


需要注意的一点是,一些作者的姓名和书名包含连字符,因此仅使用连字符进行拆分通常不起作用。

您对输入有多大的控制权?你能保证作者和标题总是用
“-”
(空格、破折号和空格)隔开吗?您确定作者不会包含
“-”
?等等

如果输入非常严格,那么您可以简单地使用,这将使它非常清楚您在做什么不要使用StringTokenizer():

StringTokenizer是一个遗留类,尽管新代码中不鼓励使用它,但出于兼容性原因保留它。建议任何寻求此功能的人改用String的split方法或java.util.regex包

演示如何使用
split()


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

您对输入有多大的控制权?你能保证作者和标题总是用
“-”
(空格、破折号和空格)隔开吗?您确定作者不会包含
“-”
?等等

如果输入非常严格,那么您可以简单地使用,这将使它非常清楚您在做什么不要使用StringTokenizer():

StringTokenizer是一个遗留类,尽管新代码中不鼓励使用它,但出于兼容性原因保留它。建议任何寻求此功能的人改用String的split方法或java.util.regex包

演示如何使用
split()


但是,如果您必须担心输入中的更多变化(例如,破折号周围的空白量是可变的还是根本不存在?),那么使用正则表达式将是简洁的。这样一来,代码的可读性和意图的清晰性就成了折衷办法。

您的正则表达式无法工作。你只有一组,你的正则表达式不行。你只有一个小组。