2013-03-05 134 views
1

我可以生成字符串是这样的:字符串,模式匹配

String str = "Phone number %s just texted about property %s"; 
String.format(str, "(714) 321-2620", "690 Warwick Avenue (679871)"); 

//Output: Phone number (714) 321-2620 just texted about property 690 Warwick Avenue (679871) 

我想实现的是反向的这一点。输入将下面的字符串

电话号码(714)321-2620只是发短信约690物业华威大道(679871)

我想要检索, “(714)321-2620” & “690 Warwick Avenue(679871)”from input

任何人都可以给指针,如何在Java或Android中实现这一点?

预先感谢您。

+0

拖放*电话号码*和*只是发短信关于财产*。然后将新的字符串分成两部分。你会得到你所需要的。这里是[Android中的字符串](http://developer.android.com/reference/java/lang/String.html)。 – 2013-03-06 08:29:29

回答

7

使用正则表达式:

String input = "Phone number (714) 321-2620 just texted about property 690 Warwick Avenue (679871)"; 
Matcher m = Pattern.compile("^Phone number (.*) just texted about property (.*)$").matcher(input); 
if(m.find()) { 
    String first = m.group(1); // (714) 321-2620 
    String second = m.group(2); // 690 Warwick Avenue (679871) 
    // use the two values 
} 

完整的工作代码:

import java.util.*; 
import java.lang.*; 
import java.util.regex.*; 

class Main 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
    String input = "Phone number (714) 321-2620 just texted about property 690 Warwick Avenue (679871)"; 
    Matcher m = Pattern.compile("^Phone number (.*) just texted about property (.*)$").matcher(input); 
    if(m.find()) { 
     String first = m.group(1); // (714) 321-2620 
     String second = m.group(2); // 690 Warwick Avenue (679871) 
     System.out.println(first); 
     System.out.println(second); 
    } 
} 

而且在ideone的链接。

+0

非常感谢。这是我正在寻找的。 – Veer 2013-03-05 09:29:39

+0

嗨,有人可以解释吗? – 2013-03-05 09:44:21

+1

@MehulJoisar它非常简单 - '^'代表您匹配'$'的字符串的开始 - 结束。所以你只关心匹配整个字符串的匹配。 '(。*)'是匹配组,它们将匹配任何符号序列。 'm.group(1)'会返回第一个这样的组和'group(1)' - 第二个。匹配字符串中的其余符号与您匹配的字符串中的字符只是一对一地匹配。希望能够说清楚。 – 2013-03-06 08:53:28

0

这很简单,同时很难。

基本上,你可以很容易地使用String.split()来分割正则表达式中的字符串或首次出现的字符。

但是,您需要有一个清晰的模式来检测电话号码和地址。这取决于你自己对这些信息可能性的定义。