2010-02-05 7 views
1

파일을 받아들이고 (Scanner 클래스 사용) 작은 파일을 작성하고 해당 파일을 문자열로 반환 한 다음 해당 문자열에서 시작하는 부분 문자열의 인스턴스를 검색하려고합니다. "Email :"로 끝나며 ".edu"로 끝납니다. 이 부분 문자열의 인스턴스가 많이있을 것입니다. 각 인스턴스는 배열이나 새 파일로 구문 분석하려고합니다.자바에서 문자열의 부분 문자열을 여러 번 파싱하는 방법

부분 문자열을 찾는 방법을 알고 있지만 A) 부분 문자열의 모든 인스턴스를 검색하고 B) 부분 문자열의 시작 및 끝을 지정하는 방법을 모르겠습니다.

누군가이 논리로 나를 도울 수 있습니까?

감사합니다.

답변

1

를이 나에게 정규 표현식의 경우 같은 소리 :

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:[email protected] Bar Email:[email protected] 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 예를 들어 "Email : [email protected] Email : [email protected]"라고 입력하면 "[email protected] Email : a @ b .edu ".

+0

이것은 매우 도움이됩니다. 감사합니다! 나는 정규 표현식에 대해 더 많이 배워야 할 것입니다 - 그들은 강력한 것들을 할 수있는 것처럼 보입니다! – littleK

+0

@ behrk2 : 정규 표현식이 그 자리에서 훌륭합니다. 패턴 일치입니다. 그들은 쉽게 과용 될 수 있습니다. 이 경우에는 적합하지만 모든 문자열 조작 작업에 사용하지 마십시오. 더 간단한 방법이 있습니다. –

+2

스탠드 백, 나는 규칙적인 예외를 알고있다! –

2

indexOf()를 사용할 수 있습니다. 나는 당신이 그것을 어디에서 찾을지를 말할 수 있다고 생각한다. 그래서의 인스턴스 찾을 수 있습니다 "이메일 :"

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

문제를 해결할 의지와 ITT는 abc.co.in xyz.com 또는 test.fileserver.abc.co.bz의 도메인으로 이메일 패턴에 대해 작동합니다.

관련 문제