2012-08-07 83 views
0

我試圖提取一封電子郵件並使用模式(EMAIL_PATTERN)將其替換爲空格。運行以下命令時,傳入完整文檔時不會生成任何輸出。該模式只會匹配整個區域。所以這意味着如果我們只通過電子郵件,電子郵件將被匹配並被替換爲一個空格。但以下方法的目的是找到電子郵件和以前的手動提取不是必需的。在tempString中的電子郵件被替換之後,我想將它用於下一個模式。我應該在一種方法中結合我想使用的模式,還是應該將它們放置在不同的方法中?以下是我現在的代碼。另外我有其他模式,但由於我的方法工作不正常,我還沒有發佈。使用多個Java正則表達式

private static final String EMAIL_PATTERN = "[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})"; 
public static void main (String[] args) { 
//Document takes in a ID, student information(which includes email, address, phone, name), school, and text 
Document r = new Document("", "FirstName LastName, Address, [email protected], phoneNumber", "School", "experience", "text"); 
      personalEmailZone(r); 

} 
public static Document personalEmailZone(Document doc){ 
    //tempString is the personal information section of a resume 
    String tempPI = doc.tempString(); 
    if(doc.tempString().matches(EMAIL_PATTERN) == true){ 
     //Pattern pattern = Pattern.compile(""); 
     Pattern pattern = Pattern.compile(EMAIL_PATTERN); 
     Matcher matcher = pattern.matcher(tempPI); 
     String emailTemp = ""; 
     if(matcher.find()){ 
      emailTemp = matcher.group(); 
      System.out.println(emailTemp); 
      //PI.replace(emailTemp, ""); 
      System.out.println(emailTemp.replace(emailTemp, "")); 
      tempPI = tempPI.replace(emailTemp, ""); 
      System.out.println(tempPI); 
     } 
    } 
    return doc; 
} 

回答

0

你有幾個問題:

public static Document personalEmailZone(Document doc){ 
    //tempString is the personal information section of a resume 
    String tempPI = doc.tempString(); 
    if(doc.tempString().matches(EMAIL_PATTERN) == true){ 

上述聲明試圖對電子郵件地址模式整個文件相匹配。這不匹配,除非doc.tempString()只包含一個電子郵件地址,沒有別的。

 //Pattern pattern = Pattern.compile(""); 
     Pattern pattern = Pattern.compile(EMAIL_PATTERN); 
     Matcher matcher = pattern.matcher(tempPI); 
     String emailTemp = ""; 
     if(matcher.find()){ 
      emailTemp = matcher.group(); 
      System.out.println(emailTemp); 
      //PI.replace(emailTemp, ""); 
      System.out.println(emailTemp.replace(emailTemp, "")); 

不確定上述內容。如果你的代碼達到了這一點,它總是會打印一個空行。

  tempPI = tempPI.replace(emailTemp, ""); 
      System.out.println(tempPI); 
     } 

由於沒有循環,您將只替換第一次出現的電子郵件地址。如果您期望替換所有出現的事件,則需要循環輸入。

} 
    return doc; 

此時你還沒有真正被修改doc,所以你的原始形式返回文件,用電子郵件地址包括在內。

} 

看的Javadoc String#replaceAll(String regex, String replacement)

0

您可以將您的模式放在不同的方法中,這些方法會返回文本模式用法的修改字符串。例如

String tempPI = doc.tempString(); 
tempPI = applyPattern1(tempPI); 
tempPI = applyPattern2(tempPI) 
tempPI = applyPattern3(tempPI); 

由於doc.tempString().matches(EMAIL_PATTERN) == true,您的代碼沒有顯示任何輸出。也許它不需要那裏,因爲它期望整個字符串是一個電子郵件。