我正在尝试使用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”
答案 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