![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 七嘴八舌異言堂
(https://www.pcdvd.com.tw/forumdisplay.php?f=12)
- - 問個Java程式的問題
(https://www.pcdvd.com.tw/showthread.php?t=334422)
|
|---|
引用:
嗯∼可能真的我想的太複雜了。 因為原來從範例修改使用很多while∼快100行了。 看到token這麼好用就用啦。好像走向不歸路...:shock: 我突然發現我雖然把程式碼變短了 但是我不知道該如何去區別一串字母和一串符號... 這才是基本的核心所在吧∼ 我不用ascii code了。看到[a-zA-Z0-9]想到regular express。 請各位高手再提示一下吧。(今天已經coding10多小時了,真是廢...不過是個小題目) |
我也不是高手,因為我通常還是在新手區發問問題.
下面的code是我剛剛試的想法.比樓主的Code只多了Method觀念. 沒有註解因為時間晚.所以也沒去考慮其它的Supression Pattern. :) import java.util.*; public class ReverseString { private StringBuffer tokenizedStr = null; public ReverseString() { tokenizedStr = new StringBuffer(); } private void tokenizeIt(String name) { StringTokenizer tokener = new StringTokenizer(name, " "); while (tokener.hasMoreTokens()) { tokenizedStr.append(reverseEachToken(tokener.nextToken())); tokenizedStr.append(" "); } }//End tokenizeIt() public String reverseEachToken(String str) { StringBuffer strBuf = new StringBuffer(str); int index = 0; boolean isletter = true; char letter; while (isletter && index < strBuf.length()) { letter = strBuf.charAt(index); if (('A' <= letter && letter <= 'Z') || ('a' <= letter && letter <= 'z') || letter == '-' || letter == '"') { index++; } else { isletter = false; } } StringBuffer strBufTMP = new StringBuffer(strBuf.substring(0, index)); strBufTMP.reverse(); strBuf.replace(0, index, strBufTMP.toString()); strBufTMP = null; return strBuf.toString(); }//End reverseEachToken() public static void main(String[] args) { ReverseString rs = new ReverseString(); rs.tokenizeIt("Hi~ what's your name?"); rs.tokenizeIt("hello!! I'm Prescott"); rs.tokenizeIt("And, how the word \"UNIX-Like\"?"); System.out.println(rs.tokenizedStr.toString()); } }// End main() |
java collection package裡面有一個Stack物件,拿來用用看。
情況1:需反轉字元,才push資料入Stack裡面,如:遇到H, i, y, x 情況2:非反轉字元,從Stack裡面pop資料出來,如:遇到~, 空格, ', ? 輸入:Hi~ what's your name? ---------------------------- 遇到H →把H送入Stack 遇到i →把i送入Stack 遇到~ →Stack裡面有資料都先pop出來輸出,再輸出~ 輸出結果:iH~ 遇到空格 →Stack裡面有資料都先pop出來輸出,再輸出空格 輸出結果:iH~空格 遇到w →把w送入Stack 遇到h →把h送入Stack 遇到a →把a送入Stack 遇到t →把t送入Stack 遇到' →Stack裡面有資料都先pop出來輸出,再輸出' 輸出結果:iH~空格tahw' 遇到s →把s送入Stack 遇到空格 →Stack裡面有資料都先pop出來輸出,再輸出空格 輸出結果:iH~空格tahw's空格 遇到y →把y送入Stack 遇到o →把o送入Stack 遇到u →把u送入Stack 遇到r →把r送入Stack 遇到空格 →Stack裡面有資料都先pop出來輸出,再輸出空格 輸出結果:iH~空格tahw'[color=sky blue]s[/color]空格ruoy空格 遇到n →把n送入Stack 遇到a →把a送入Stack 遇到m →把m送入Stack 遇到e →把e送入Stack 遇到? →Stack裡面有資料都先pop出來輸出,再輸出? 輸出結果:iH~空格tahw'[color=sky blue]s[/color]空格ruoy空格eman? ---------------------------- 輸出:iH~ tahw's ruoy eman? |
我也寫一個~真的不要想的太複雜~
import javax.swing.*; class re { public static void main( String args[] ){ String s1 = JOptionPane.showInputDialog("請輸入字串")+" " ; System.out.println(s1); char s[] = s1.toCharArray() , q; StringBuffer sb = new StringBuffer(); for (int i=0 ; i<s.length; i++){ q=s[i]; if( ((int)q>=65&&(int)q<=90)||((int)q>=97&&(int)q<=122) ) { sb.append(String.valueOf(q)); } else{ System.out.print(sb.reverse()); System.out.print(String.valueOf(q)); sb = new StringBuffer(); } } System.exit(0); } } |
...
|
用stack來做的話,會很方便,只要讀到空白或'這樣就pop出來前面的部分
然後再反轉字串就行了= = |
引用:
寫程式我從不相信有所謂的高手!!高手在我眼中的定義是比別人多練習很多所以比較 會寫而已!!:) 如果先把原來的字用for依序讀入若不是空白也不是「'」便存在同一個陣列,若遇空 白或是[' ]便自已存在一個陣列最後再用一個for把各陣列倒反再組合印出(好像和上 面一位大大的想法不會差很多) |
引用:
這個有點問題唷∼呵呵 UNIX-Like出來要XINU-ekiL唷。 上面的我只是舉例而以。 另外,Stack我沒有印像學過耶。 感謝各路好手蒞臨指教。我會仔細參考的。 你們熱情的協助,讓小弟感激不盡。:shy: :shy: 陣列的作法好像比較簡單,不過我還沒學到,要想一想唷∼ 方便的話,順便推薦一下幾本中文JAVA好書好了。 我現在是抱著一本蠢原文書猛看∼還有吸收各位的想法及作法。:shy: :shy: |
引用:
你所謂的高手是寫作業的高手嗎?...:jolin: 別把太瞧不起高手囉 你為程式有那麼簡單嗎.程式最基板就是資料結構 離散數學 演算法 很明顯的,樓主顯然沒學過資料結構. 你沒學過這些東西,買一本快快樂樂學程式你真的會寫程式嗎? 不過是Garbage in Garbage out而已 , 就像樓主簡單的問題可以想到上百行 這一題作業有學過資料結構的用stack就可以輕鬆搞定了. 根本用不到reverse這種函數,(我還是用樓主的觀念去寫....慚愧) 更不要說那些線性代數,圖學...@#$%!$的理論了 很多人因為自己沒興趣不花工夫去K. 就認為其他比你強的人不過是多花點時間做習題而已... 這種人很多,我很不削這種人.有些東西你花同樣的時間去K 你也頂多寫的出跟習題差不多的東西.然後跟真正的高手比. 你跟他寫的東西一定不一樣..我說明白點,程式真的是要靠天份的 那些大師真的都是屬於天才級的,甚至不削做習題, 就可以想出別人想不出來的演算法,然後玩出新的東西. 資訊產業為什麼會進步的那麼迅速?因為太多高手了 你永遠都在玩高手玩過的東西..除非你變成高手,為資訊產業貢獻一些有用的東西 不然不要認為別人只是只寫程式寫的比別人多的人...人生應該花在更美好的事物上 然後就等著被高手玩膩的東西淘汰掉 除非你不吃這行 要不然就謙虛點...不然就是還沒遇到真正的高手吧 我老師說其實台灣高手已經很少了..它出國留學才真正見識到什麼是高手,天才 眼光要宏觀一點 |
引用:
哈~~你誤會我的意思!!我的意思最主要是強調還是要多練習,就算他有高手的料但 他不動他不寫哪知道他自已是高手?只是想說多多練習是很重要的而已別想太多,我 沒打的很清楚讓您誤解啦!!不是沒高手只是勤能補拙而已:) :) |
| 所有的時間均為GMT +8。 現在的時間是06:25 PM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2025。