Android:如何从另一个字符串中检索特定模式的字符串

时间:2014-06-12 09:20:54

标签: android regex string

我有一个像$29@@rent1@@rent2@@rent3$这样的字符串。现在,我要检索的只有29rent1,那么我该如何实现呢?我可以在这里使用正则表达式吗

任何回复都会感激不尽。

3 个答案:

答案 0 :(得分:2)

您可以使用StringTokenizer设备。

(编辑)的

    String STR = "$29@@rent1@@rent2@@rent3$";

    StringTokenizer st = new StringTokenizer(STR, "$@");
    while(st.hasMoreElements())
        Log.v("", "Tokens: " + st.nextToken());

输出:

06-12 11:31:58.228: V/(1045): Tokens: 29
06-12 11:31:58.228: V/(1045): Tokens: rent1
06-12 11:31:58.228: V/(1045): Tokens: rent2
06-12 11:31:58.228: V/(1045): Tokens: rent3

答案 1 :(得分:0)

假设你的字符串总是具有$ {some strings} $的格式,那些字符串是由“@@”连接的元素,你想得到第一个和第二个元素。

如果是这样,第一步是删除源字符串的第一个和最后一个字符:

String new_string = old_string.substring(1, old_string.length() - 1);

接下来,将剩余部分拆分为子字符串数组:

String[] elements = new_string.split("@@");

现在得到你想要的数组。不要忘记检查结果数组的长度。

这是一个片段:

String old_string = "$29@@rent1@@rent2@@rent3$";
// if you don't know how your string looks like, use a try - catch to
// ensure your app will not crush
try {
    String new_string = old_string
            .substring(1, old_string.length() - 1);
    String[] elements = new_string.split("@@");

    for (String text : elements) {
        System.out.println(text);
    }
} catch (Exception er) {
    er.printStackTrace();
}

希望有所帮助。

p.s:如果你想在这个问题上使用StringTokenizer,我建议你先阅读这个答案。

Scanner vs. StringTokenizer vs. String.Split

答案 2 :(得分:0)

尝试使用正则表达式捕获和非捕获组。虽然拆分它会更有意义(显然......)

public static void main(String[] args) {
    String s = "$29@@rent1@@rent2@@rent3$";
    Pattern p = Pattern.compile("\\$(\\d+)(?:@@)(\\w+|\\d+).*"); // capture only 29 and rent1, ignore @@
    Matcher m = p.matcher(s);
    m.find();
    System.out.println(m.group(1));
    System.out.println(m.group(2));

}

O/P :

29
rent1