2012-12-03 104 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循環來查找所有匹配的子字符串。

相關問題