0

我有一个格式的字符串:

<+923451234567>:您好,这里是正文。

现在我想在 < > 符号之间的字符串开头获取手机号码(没有任何非字母数字字符),即 923451234567,以及文本,即 Hi here 是文本。

现在我可以放置一个我目前正在做的硬编码逻辑。

String stringReceivedInSms="<+923451234567>: Hi here is the text.";

String[] splitted = cpaMessage.getText().split(">: ", 2);
String mobileNumber=MyUtils.removeNonDigitCharacters(splitted[0]);
String text=splitted[1];

如何使用正则表达式从字符串中巧妙地获取所需的字符串?这样我就不必在字符串格式发生变化时更改代码。

4

4 回答 4

3
String stringReceivedInSms="<+923451234567>: Hi here is the text.";

Pattern pattern = Pattern.compile("<\\+?([0-9]+)>: (.*)");
Matcher matcher = pattern.matcher(stringReceivedInSms);
if(matcher.matches()) {
    String phoneNumber = matcher.group(1);
    String messageText = matcher.group(2);
}
于 2013-04-11T10:19:12.653 回答
2

您需要使用正则表达式,以下模式将起作用:

^<\\+?(\\d++)>:\\s*+(.++)$

以下是您将如何使用它 -

public static void main(String[] args) throws IOException {
    final String s = "<+923451234567>: Hi here is the text.";
    final Pattern pattern = Pattern.compile(""
            + "#start of line anchor\n"
            + "^\n"
            + "#literal <\n"
            + "<\n"
            + "#an optional +\n"
            + "\\+?\n"
            + "#match and grab at least one digit\n"
            + "(\\d++)\n"
            + "#literal >:\n"
            + ">:\n"
            + "#any amount of whitespace\n"
            + "\\s*+\n"
            + "#match and grap the rest of the string\n"
            + "(.++)\n"
            + "#end anchor\n"
            + "$", Pattern.COMMENTS);
    final Matcher matcher = pattern.matcher(s);
    if (matcher.matches()) {
        System.out.println(matcher.group(1));
        System.out.println(matcher.group(2));
    }
}

我添加了Pattern.COMMENTS标志,因此代码将与嵌入的注释一起使用,以供将来参考。

输出:

923451234567
Hi here is the text.
于 2013-04-11T10:28:02.730 回答
2

使用与模式匹配的正则表达式 -<\\+?(\\d+)>: (.*)

使用PatternMatcherjava 类来匹配输入字符串。

Pattern p = Pattern.compile("<\\+?(\\d+)>: (.*)");
Matcher m = p.matcher("<+923451234567>: Hi here is the text.");
if(m.matches())
{
    System.out.println(m.group(1));
    System.out.println(m.group(2));
}
于 2013-04-11T10:17:39.657 回答
0

您只需执行以下操作即可获取您的电话号码:

stringReceivedInSms.substring(stringReceivedInSms.indexOf("<+") + 2, stringReceivedInSms.indexOf(">"))

所以试试这个片段:

public static void main(String[] args){
        String stringReceivedInSms="<+923451234567>: Hi here is the text.";

        System.out.println(stringReceivedInSms.substring(stringReceivedInSms.indexOf("<+") + 2, stringReceivedInSms.indexOf(">")));
    }

你不需要拆分你的字符串。

于 2013-04-11T10:18:09.957 回答