Discussion:
[J2SE] html的文字能當成string用嗎?
(时间太久无法回复)
FF4
2007-04-15 07:22:57 UTC
Permalink
http://udn.com/NEWS/WORLD/WOR1/3804335.shtml
以上是我要截取的網頁

我在前面先宣告
String endString = "聯合報";

截取時
while ((lineStr=in.readLine())!= null )
{ if(lineStr.equals(endString))
break;

testStr=testStr.replaceAll("<[^>]*>","");
testStr=testStr.replaceAll("&nbsp;","");
}

原本的用意是我是只想要截取新聞~避免掉其他的html碼,

讓他讀到新聞結尾的聯合報就跳出

但是這樣的做法好像行不通

有人可以指點一下嗎?謝謝

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.57.128.92
人生第一個第一名
2007-04-15 07:42:31 UTC
Permalink
標題一整個不對
你不是已經把 html 當字串在用了嗎? @__@

※ 引述《brianpcbest (FF4)》之銘言:
: http://udn.com/NEWS/WORLD/WOR1/3804335.shtml
: 以上是我要截取的網頁
: 我在前面先宣告
: String endString = "聯合報";
: 截取時
: while ((lineStr=in.readLine())!= null )
: { if(lineStr.equals(endString))
: break;
: testStr=testStr.replaceAll("<[^>]*>","");
: testStr=testStr.replaceAll("&nbsp;","");
: }
: 原本的用意是我是只想要截取新聞~避免掉其他的html碼,
: 讓他讀到新聞結尾的聯合報就跳出
: 但是這樣的做法好像行不通
: 有人可以指點一下嗎?謝謝

你的程式碼也有點怪
因為實在看不出來 lineStr 跟 testStr 的關係 @__@
說不定是錯在這裡

而且你壓根沒有說「怎麼個行不通」
那我們也不知道發生啥事情、也無法提供任何有效的 hint

最後,我的智商實在沒辦法處理 RE(正規表示法)這種東西
只不過,你這樣子應該還是會留下一對像 JavaScript 等等的東西
建議你至少先把 <body></body> 之外的東西拿掉

--
 侃侃長論鮮窒礙  首頁:http://www.psmonkey.idv.tw
 眾目睽睽無心顫  Blog:http://ps-think.blogspot.com
 煢居少聊常人事 
 殺頭容易告白難  歡迎參觀 Java 版(@ptt.cc)精華區 \囧/

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.193.189
骨頭
2007-04-15 07:42:51 UTC
Permalink
※ 引述《brianpcbest (FF4)》之銘言:
: http://udn.com/NEWS/WORLD/WOR1/3804335.shtml
: 以上是我要截取的網頁
: 我在前面先宣告
: String endString = "聯合報";
: 截取時
: while ((lineStr=in.readLine())!= null )
: { if(lineStr.equals(endString))
: break;
: testStr=testStr.replaceAll("<[^>]*>","");
: testStr=testStr.replaceAll("&nbsp;","");
: }
: 原本的用意是我是只想要截取新聞~避免掉其他的html碼,
: 讓他讀到新聞結尾的聯合報就跳出
: 但是這樣的做法好像行不通
: 有人可以指點一下嗎?謝謝

1.裡面沒有任何一行的字串 達成你的Replace條件後 是"聯合報"
你應該要用 indexOf() 或者 matches() 做"包含有"的判斷。

2.另外聯合報在開頭和結尾各有一個不適合放在結尾
建議你可以取這行

<p class="story"><span id="source_name" class="story">【2007/04/15 聯合報】
</span><span class="author"><A href="http://udn.com/" target="_blank">@
</A><a href="http://udn.com/" target="_blank">http://udn.com/</a></span> <a
href="http://udn.com/?" target="_blank"><img
src="/1024/images/logo_small.gif" width="19" height="19" border="0"
align="absmiddle"></a></p>

replaceAll後變成 取
matches(".*【20[0-9]{2}/[0-1][0-9]/[0-3][0-9] 聯合報】")
當脫離點也是種選擇


可參考 String#matches
http://0rz.tw/072Ba

--
I am a person, and I am always thinking .
Thinking in love , Thinking in life ,
Thinking in why , Thinking in worth.
I can't believe any of what ,
I am just thinking then thinking ,
but worst of all , most of mine is thinking not actioning...

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.27.68
FF4
2007-04-15 14:51:21 UTC
Permalink
首先謝謝板主跟TonyQ的熱心回文

testStr是我漏打了一行 testStr = testStr + lineStr;



我一開始採取TonyQ的建議

因為我抓的跳離點是怪怪的沒錯~一開始沒想到那麼多

不過試了一下~用正則表示式還是比對不到字串

程式依然會把整個網頁讀完才停止


http://0rz.tw/062ye

這是原始檔~裡面是用TonyQ的方法

不過我自己試endString去相等也是沒有辦法跳離

是寫法上出了什麼問題?





--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.57.128.92
骨頭
2007-04-15 15:27:15 UTC
Permalink
※ 引述《brianpcbest (FF4)》之銘言:
: 首先謝謝板主跟TonyQ的熱心回文
: testStr是我漏打了一行 testStr = testStr + lineStr;
: 我一開始採取TonyQ的建議
: 因為我抓的跳離點是怪怪的沒錯~一開始沒想到那麼多
: 不過試了一下~用正則表示式還是比對不到字串
: 程式依然會把整個網頁讀完才停止
: http://0rz.tw/062ye
: 這是原始檔~裡面是用TonyQ的方法
: 不過我自己試endString去相等也是沒有辦法跳離
: 是寫法上出了什麼問題?

你的 code 這樣只有前面允許 後面還是要完全比對

if(testStr.matches(".*【20[0-9]{2}/[0-1][0-9]/[0-3][0-9] 聯合報】"))
break;

應該改成 indexOf()!=-1

或者是
if(testStr.matches(".*【20[0-9]{2}/[0-1][0-9]/[0-3][0-9] 聯合報】.*"))
break;

詳情把regex讀懂就知道了XD

--
另外需要做String疊加的話
用StringBuffer會有更棒的效能 ,
--
 String temp="relax"; | Life just like programing
 while(buringlife) String.forgot(temp); | to be right or wrong
 while(sleeping) brain.setMemoryOut(); | need not to say
 stack.push(life.running); | the compiler will
 stack.push(scouting.buck()); | answer your life
 stack.push(bowling.practice()); | Bone everything

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.27.68
※ 編輯: TonyQ 來自: 220.134.27.68 (04/15 23:27)
Loading...