2016-01-20 40 views
3

我剛剛拿起Android,但我的任務是幫助實習項目。使用Android模式和匹配類(正則表達式)

可以說我有下面的詳細信息:

Fonia Taylo 
Product Manager 

[email protected] 
98706886 

從我上面的細節,我想將它傳遞到一個類,由此我就可以使用正則表達式過濾掉的電子郵件地址,只有通過此過濾出的電子郵件地址爲EditText。

我搜索了很多關於正則表達式的教程,尤其是Android模式和匹配器類。

但是,我發現的所有示例僅用於驗證僅輸入到EditText字段的文本。

我需要做的是:

  1. 驗證如上圖所示
  2. 篩選出使用正則表達式的電子郵件地址(並刪除文本的其餘部分)
  3. 傳遞整個文本只有這個電子郵件地址到一個EditText

目前以下是我的課程:

public class RegexOCR1 extends Activity { 

    private Pattern pattern; 
    private Matcher matcher; 

    private String recognizedText, textToUse; 

    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,})$"; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_createcontact); 

     // Getting the path of the image from another class 
     Bundle extras = this.getIntent().getExtras(); 
     recognizedText = extras.getString("TEXT"); 
     textToUse = recognizedText; 

    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     setContentView(R.layout.usetext); 
     showText(); 
     //Log.i(TAG, "onConfigChanged"); 
    } 

    private void showText(){ 
     //Log.i(TAG, "ShowText"); 
     Intent intent = new Intent(this, CreateContactActivityOCR.class); 
     startActivity(intent); 
    } 

    public EmailValidator() { 
    Pattern pattern = Pattern.compile(EMAIL_PATTERN); 
    Matcher matcher = pattern.matcher(textToUse); 
    if (matcher.find()) 
    { 
     String email = textToUse.substring(matcher.start(), matcher.end()); 


    } else { 
     // TODO handle condition when input doesn't have an email address 
    } 
    } 

    public boolean validate(final String hex) { 

     matcher = pattern.matcher(hex); 
     return matcher.matches(); 

    } 
} 

正如您所看到的,它幾乎不完整。我想將「textToUse」傳遞給正則表達式驗證,然後繼續執行上述的函數。

編輯:

以下方法後:

public EmailValidator() { 
     Pattern pattern = Pattern.compile(EMAIL_PATTERN); 
     Matcher matcher = pattern.matcher(textToUse); 
     if (matcher.find()) 
     { 
      String email = textToUse.substring(matcher.start(), matcher.end()); 


     } else { 
      // TODO handle condition when input doesn't have an email address 
     } 
     } 

其中提取出的電子郵件地址;然後我如何通過這個提取的電子郵件地址通過意圖EditText是在另一個類

請讓我知道你如何改變我的代碼,如果有任何想法。謝謝!

回答

1

下面是一些代碼來提取匹配模式的文本:

Pattern pattern = Pattern.compile(EMAIL_PATTERN); 
Matcher matcher = pattern.matcher(inputString); 
if (matcher.find()) { 
    String email = inputString.substring(matcher.start(), matcher.end()); 
} else { 
    // TODO handle condition when input doesn't have an email address 
} 
+0

非常感謝你的回覆〜我會測試一下:D –

+0

Hi @kris larson,我用「textToUse」替換「inputString」嗎? –

+0

是的,無論電子郵件內嵌字符串在什麼地方。 –

1

在Android SDK中,有類叫android.util.Patterns,在這裏您可以找到各種有用的正則表達式模式。

  • 電子郵件地址:

    android.util.Patterns.EMAIL_ADDRESS 
    

然後,你可以簡單地使用它們像這樣:

String target = ""; 

if(android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches()){ 

}