从字符串中获取某个子字符串

时间:2019-03-19 02:09:15

标签: java

要给您有关程序功能的一些背景知识,用户输入作者的姓名,我需要检查文件以了解该人撰写的文章。 对于我遇到的问题,我只需要输出想要的作者的全名(在文件中给出)。

如何仅获取通缉作者的全名? 谢谢

这里是我到目前为止的代码示例(将创建一个这样的方法):

PageNumber

4 个答案:

答案 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隔开,因此可以作为解决此问题的关键。

  1. 使用string[]将给定的字符串分隔为string.split()
  2. 在该数组中搜索所需的字符串。
  3. 打印结果。

工作代码:

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