0

我正在尝试使用从字符串中提取子字符串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> }"

而不是预期的

“文本文本文本文本”

4

3 回答 3

1

几个问题:

  • scanner.next() != "</TD>"将始终true作为操作数不会是同一个对象。使用!scanner.next().equals("</TD>"). 来自JLS 的 Reference Equality Operators == 和 != 部分

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

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

    String line;
    while (scanner.hasNext() && !(line = scanner.next()).equals("</TD>"))
    {
        stringer+= " " + line;
    }
    
于 2012-05-28T13:55:14.410 回答
0

您可以使用正则表达式。

就像是 :

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

  //do whatever you want here
 }

(未测试)

于 2012-05-28T13:58:31.923 回答
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
于 2012-05-28T23:38:30.990 回答