جافا تحليل العديد من مثيلات السلسلة الفرعية من سلسلة

StackOverflow https://stackoverflow.com/questions/2205766

سؤال

أحاول كتابة برنامج Java صغير يقبل ملف (باستخدام فئة الماسح الضوئي)، وإرجاع الملف كسلسلة، ثم ابحث في هذه السلسلة عن أي مثيل لبدء تشغيل "البريد الإلكتروني:" وتنتهي مع ".edu ". ستكون هناك العديد من مثيلات السلسلة الفرعية هذه، كل منها أريد تحليلها في صفيف أو ملف جديد.

أعرف كيفية العثور على فرعية فرعية، لكنني لا أعرف كيف أ) البحث عن كافة مثيلات Substring و B) تحديد بداية وإنهاء السلسلة الفرعية.

هل يمكن لشخص مساعدتي في هذا المنطق؟

شكرا!

هل كانت مفيدة؟

المحلول

هذا يبدو وكأنه قضية للتعبيرات العادية بالنسبة لي:

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 البريد الإلكتروني:b.edu" كنت في نهاية المطاف مع تطابق "foo@bar.com البريد الإلكتروني:b.edu ".

نصائح أخرى

يمكنك استخدام indexof (). أعتقد أنك تستطيع أن تقول ذلك إلى أين يمكنك البحث عنه أيضا. حتى تجد مثيلات "البريد الإلكتروني:":

while(index < input.size()){
  substringLocation = input.indexOf("Email:", index);
  // do something with substring
  index = substringLocation;
}
private static final Pattern EMAIL_PATTERN = Pattern.compile
    ("Email:(.*?\\.[a-z]*?[\\.[a-z]]*)"); 

سوف يحل المشكلة وسيعمل ITT لأي نمط بريد إلكتروني مثل ABCCO.IN XYZ.COM أو TEST.FILESERVER.ABCCO.BZ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top