2012-12-03 136 views
2

我需要一些帮助从字符串中提取多个子字符串。作为下面给出一个字符串的示例:如何从Android/Java中的字符串中获取多个子字符串?

String str = "What is <Mytag a exp 5 exp 3> written as a single power of <i>a</i> <Mytag yx4> and the double power of <b>x+y</b> <Mytag 3xy4>"; 

我试图让子“< Mytag”与“>”

所以我的愿望输出将是
1)EXP 5 EXP 3
2)yx4
3)3xy4

我试图与扫描仪和子串的一切,我得到第一个字符串成功b解决第二次和第三次发生的问题。

在子串方法中,我成功获取所有计数索引“< Mytag”,但无法获得“>”的正确索引,因为它还带有粗体和斜体。

+0

你可以试试串 –

+0

获得最接近'>'后每个'

+0

'indexOf()'也可以用这种形式'int indexOf(int ch,int startIndex)'写成。在这里你可以指定'startIndex'比先前找到的索引多1。最后,您还应该检查执行这些操作时的“IndexOutOfBounds”异常 –

回答

3

As Rohit Jain用正则表达式说。下面是功能代码:

// import java.io.Console; 
import java.util.regex.Pattern; 
import java.util.regex.Matcher; 

public class RegexTestHarness { 

    public static void main(String[] args){ 
    // Console console = System.console(); // Not needed 

    Pattern pattern = Pattern.compile("<Mytag([^>]*)>"); 

    String myString = "What is <Mytag a exp 5 exp 3> written as a single power of <i>a</i> <Mytag yx4> and the double power of <b>x+y</b> <Mytag 3xy4>"; 
    Matcher matcher = pattern.matcher(myString); 

    while (matcher.find()) { 
     // Rohit Jain observation 
     System.out.println(matcher.group(1)); 
    } 

    } 
} 

来源:Java Regex tutorial.

+1

但是,为什么要使用'replace'?你不能只是得到'组1'吗? –

+0

真的吗?我不知道。我知道关于Backwhack,但在Java中我从来没有使用它。 – rendon

+0

@Rafael ..这不仅仅是关于Java。这是关于Regex如何在一般工作。了解“捕获组”。是的,请不要给现成的解决方案给没有试过任何东西的人。 OP将只复制粘贴代码,因此它不会帮助他,否则我自己会给它。记住这个未来。 –

4

使用正则表达式为: -

"<Mytag ([^>]*)>" 

,并获得group 1从上述正则表达式。您需要将其与PatternMatcher类一起使用,并使用Matcher#find方法以及while循环来查找所有匹配的子字符串。

相关问题