要给您有关程序功能的一些背景知识,用户输入作者的姓名,我需要检查文件以了解该人撰写的文章。 对于我遇到的问题,我只需要输出想要的作者的全名(在文件中给出)。
如何仅获取通缉作者的全名? 谢谢
这里是我到目前为止的代码示例(将创建一个这样的方法):
PageNumber
答案 0 :(得分:3)
我建议您将输入String拆分为多个作者,然后循环返回结果以查找所需的作者。
高级示例:
public static void main (String[] args) throws java.lang.Exception
{
String authors = "J. Park and J. N. James and Q. Li and Y. Xu and W. Huang";
String authorName = "James";
String[] parts = authors.split(" and ");
for (String p : parts) {
if (p.contains(authorName)) {
System.out.println(p);
}
}
}
通过这种方式,您正在处理要搜索的令牌,而不是尝试进行偏移。但是,这不是唯一的方法。与原始代码类似,它还假定:
contains
方法来唯一标识所需的作者。换句话说,如果在同一输入String中具有“ J. N. James”和“ James Joyce”,则此方法将失败。但这也许是一个不同的问题。答案 1 :(得分:1)
您无需使用indexOf
,它将使逻辑更加复杂。由于authorNames
被和隔开,因此可以作为解决此问题的关键。
string[]
将给定的字符串分隔为string.split()
。工作代码:
public class stackStringSearch
{
public static void main(String[] args)
{
String authors = "J. Park and J. N. James and Q. Li and Y. Xu and W. Huang";
String authorName = "James";
System.out.println(searchName(authors,authorName));
}
public static String searchName(String authors,String authorName)
{
//converting array of strings splitted by "and"
String[] authorsArray = authors.split("and");
for(String name: authorsArray)
{
if(name.indexOf("James") > -1 ) // name is found
return name;
}
return authorName;
}
}
答案 2 :(得分:0)
String authors = "J. Park and J. N. James and Q. Li and Y. Xu and W. Huang";
String authorName = "Huang";
Optional<String> name = Arrays.stream(authors.split(" and "))
.filter(author -> author.contains(authorName))
.findFirst();
if(name.isPresent()) {
System.out.println(name.get());
}
答案 3 :(得分:0)
尝试以下代码:
public static void main(String[] args){
String authors = "J. Park and J. N. James and Q. Li and Y. Xu and W. Huang";
String authorName = "James";
String[] authorFullNames = authors.split(" and ");
String desiredAuthorFullName = Arrays.stream(authorFullNames)
.filter(authorFullName ->authorFullName.contains(authorName))
.collect(Collectors.joining(" "));
System.out.print(desiredAuthorFullName);
}