如何在Android/Java中从字符串中获取多个子字符串?

3

我需要帮助从一个字符串中提取多个子字符串。以下是一个字符串的示例:

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) a exp 5 exp 3
2) yx4
3) 3xy4

我尝试使用Scanner和substring方法,成功获取了第一个字符串,但在获取第二个和第三个出现的字符串时遇到了问题。

在substring方法中,我成功获取了所有标签"<Mytag"的索引,但无法正确获取">"的索引,因为它还包含粗体和斜体。


你可以尝试使用正则表达式处理字符串。 - Extreme Coders
获取每个<mytag后最接近的>应该可以,对吗? - John Dvorak
indexOf()也可以写成这种形式:int indexOf(int ch, int startIndex)。在这里,您可以指定startIndex比上一个找到的索引多1。最后,在执行这些操作时,您还应该检查IndexOutOfBounds异常。 - Extreme Coders
2个回答

4
使用正则表达式来实现:-
"<Mytag ([^>]*)>"

从上面的正则表达式中获取“group 1”。您需要使用PatternMatcher类,并使用Matcher#find方法与一个 while 循环来查找所有匹配的子字符串。

3

正如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正则表达式教程。


1
但是你为什么要使用 replace?难道不能直接获取 group 1 吗? - Rohit Jain
真的吗?我不知道。我知道反斜杠,但在Java中我从未使用过它。 - rendon
好的,我会考虑的。谢谢。 - rendon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接