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()
但是,如果您必须担心输入中的更多变化(例如,破折号周围的空白量是可变的还是根本不存在?),那么使用正则表达式将是简洁的。这样一来,代码的可读性和意图的清晰性就成了折衷办法。您的正则表达式无法工作。你只有一组,你的正则表达式不行。你只有一个小组。