作者bleed1979 (十三)
看板java
标题Re: [问题] 编译没有错误但是进入while回圈後程式停住
时间Wed Dec 15 20:00:43 2010
※ 引述《angus2006 (禹)》之铭言:
: 各位大大你好
: 小弟的程式在compile没有错误
: 但不知为何跑程式时进入程式中的while回圈就停住
: 可以请高手大大帮忙看一下是哪里出问题了吗
: 程式码在下面网址
: http://s98.tku.edu.tw/~498418010/ParserRun.java
: http://s98.tku.edu.tw/~498418010/Parser.java
: http://s98.tku.edu.tw/~498418010/Parser2.java
: http://s98.tku.edu.tw/~498418010/Parser3.java
: 谢谢
有sample档果然马上抓到问题。
前提,推文的几个break位置要改对。
问题有两个:
1.for回圈里用来确认标签"<"和"</"的长度不够。
"<"在一开头,所以可能上没问题,但是"</"是在内容後面。
如果内容过长,for回圈跑没那麽多次,就抓不到。
所以我把< 100改成< 1000,要改的有两个地方。
for (int i = 0; i < 1000; i++)// 计算标签长度
^^^^^^^
建议你用static final起来。
2.如果内容和"</"刚好只有一个token,程式要整个跳出。
像是113</weblog:tier>,才一个token而已。
当你抓了113之後,要整个跳出两层的for回圈,
为避免更动你的程式码太多,我只加了一个boolean isFinished变数
boolean isFinished = false;
while (!token.startsWith("<") && !token.startsWith("</"))
// 取得标签所包含的内容
然後在内for回圈里
for (int i = 0; i < 1000; i++)// 计算标签长度
{
temp = "";
temp = temp + token.charAt(i) + token.charAt(i + 1);
if (temp.equals("</"))
{
token = token.substring(0, i);// 去掉结束标签
content = content + " " + token;
isFinished = true;
break;// 取得开始标签後即可跳出for回圈
}
}
if(isFinished) {
// 内容已全部撷取完毕,跳出回圈
break;
}
改了以上这两点之後,就可以在视窗显示content了,
如果我这样讲不清楚的话,再信件联络,看怎麽把改好的档给你。
Bleed
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.43.119.204
1F:推 angus2006:感谢大大 问题已解决了 ^^ 12/16 17:08