如何从字符串(Android)中提取子字符串?

时间:2012-05-28 13:44:12

标签: java android string substring

我正在尝试使用java.Util.Scan

从字符串中提取子字符串

子字符串位于原始字符串中的“<TD class=MoreB align=center>”和“</TD>”之间

这是代码:

public static String pullStringOut(String str)
{
    String stringer = null;

    Scanner scanner = new Scanner(str);
    scanner.findInLine("<TD class=MoreB align=center>");

    while (scanner.hasNext() && scanner.next() != "</TD>")
    {
        stringer+= " " + (scanner.next());
    }

    return stringer;
}

但它运作不佳。

从原始字符串:

<TD class=MoreB align=center>TextTextTextText</TD></TR></TABLE> }

我得到以下结果:

  

TextTextTextText</TD></TR></TABLE> }

而不是预期的

  

“TextTextTextText”

3 个答案:

答案 0 :(得分:1)

一些问题:

  • scanner.next() != "</TD>"始终为true,因为操作数不是同一个对象。使用!scanner.next().equals("</TD>")。来自Reference Equality Operators == and != section of the JLS

      

    如果操作数值都为null或两者都引用,则!=的结果为false   相同的对象或数组;否则,结果是真的。

  • scanner.next()在循环的每次迭代中被调用两次。改为:

    String line;
    while (scanner.hasNext() && !(line = scanner.next()).equals("</TD>"))
    {
        stringer+= " " + line;
    }
    

答案 1 :(得分:0)

您可以使用正则表达式。

类似的东西:

    Pattern p = Pattern.compile("/\<TD class=MoreB align=center>(.*)\<\/td\>/"); 
Matcher m = p.matcher(str); 
while(m.find()) { 

  //do whatever you want here
 }

(未经测试)

答案 2 :(得分:0)

这是另一种解决方案:

String tvt ="<TD class=MoreB align=center>TextTextTextText</TD></TR></TABLE> }" //your original string
                String s ="<TD class=MoreB align=center>";
                String f= "</TD>";
                int sindex =tvt.indexOf(s);
                int findex =tvt.indexOf(f);
                String fs = "";
                if(sindex!=-1 && findex!=-1)
                fs=tvt.substring(sindex+s.length(), findex); // your desired substring