【问题标题】:Java parsing many instances of substring from StringJava 从 String 解析许多子字符串实例
【发布时间】:2010-02-05 08:06:13
【问题描述】:

我正在尝试编写一个小型 Java 程序,该程序将接受文件(使用 Scanner 类),将文件作为字符串返回,然后在该字符串中搜索以“电子邮件:”开头并以结尾的子字符串的任何实例“.edu”。这个子字符串会有很多实例,每个实例我都想解析成一个数组或一个新文件。

我知道如何查找子字符串,但我不知道如何 A) 搜索子字符串的所有实例和 B) 指定子字符串的开始和结束。

有人可以帮我解决这个逻辑吗?

谢谢!

【问题讨论】:

    标签: java substring java.util.scanner


    【解决方案1】:

    你可以使用 indexOf()。我想你也可以告诉它从哪里搜索。因此,要找到您的“电子邮件:”实例:

    while(index < input.size()){
      substringLocation = input.indexOf("Email:", index);
      // do something with substring
      index = substringLocation;
    }
    

    【讨论】:

      【解决方案2】:

      对我来说,这听起来像是正则表达式的一个案例:

      import java.util.regex.*;
      
      public class Test
      {
          private static final Pattern EMAIL_PATTERN = Pattern.compile
              ("Email:(.*?\\.edu)");
      
          public static void main(String[] args)
          {
              String testString = "FooEmail:jjj@xyz.edu Bar Email:mmm@abc.edu Baz";
      
              printEmails(testString);
          }
      
          public static void printEmails(String input)
          {
              Matcher matcher = EMAIL_PATTERN.matcher(input);
              while (matcher.find())
              {
                  System.out.println(matcher.group(1));
              }
          }
      }
      

      请注意,如果您有任何 .edu 电子邮件,您会得到奇怪的结果...例如,如果您有“电子邮件:foo@bar.com 电子邮件:a@ b.edu”你最终会得到一个匹配的“foo@bar.com Email: a@b.edu”。

      【讨论】:

      • 这对我很有帮助,谢谢!我将不得不学习更多关于正则表达式的知识——它们似乎可以做强大的事情!
      • @behrk2:正则表达式在它们的位置上很棒——模式匹配。但是,它们很容易被过度使用。在这种情况下,它们非常适合,但不要尝试将它们用于所有字符串操作任务......通常有更简单的方法。
      • 退后一步,我知道常规例外!
      • 如果两个邮箱地址之间总是有空格,可以通过将正则表达式修改为Email:(\\S+\\.edu)来避免上一句中提到的问题。
      【解决方案3】:
      private static final Pattern EMAIL_PATTERN = Pattern.compile
          ("Email:(.*?\\.[a-z]*?[\\.[a-z]]*)"); 
      

      将解决问题,它适用于任何电子邮件模式,例如 abc.co.in xyz.com 或 test.fileserver.abc.co.bz 域。

      【讨论】:

        猜你喜欢
        • 2021-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-28
        相关资源
        最近更新 更多