pupuliao的部落格

寫教學的最大目的是教會未來的自己

Get Adobe Flash player

JAVA的UTF-8 繁簡互轉的方法

首先 要先感謝來自PTT JAVA版的 ClareQ (人比人Cheese人)

他的方法讓我大開眼界,比我上一篇使用replace 的方法更為快速,他使用了 hashmap

也感謝他允許我發了這篇文章

 

 

 

public class Encoding {

	public Encoding() {

	}

	public String StoT(String data) {
		return translate(data, S2T);
	}

	public String TtoS(String data) {
		return translate(data, T2S);
	}

	private static final Map T2S = new HashMap();
	private static final Map S2T = new HashMap();
	static {
                final char[] UTF8T ="繁體字表...".toCharArray();
                final char[] UTF8S ="簡體字表...".toCharArray();
                for (int i = 0, n = Math.min(UTF8T.length, UTF8S.length); i < n; i++) {
			final Character cT = Character.valueOf(UTF8T[i]);
			final Character cS = Character.valueOf(UTF8S[i]);
			T2S.put(cT, cS);
			S2T.put(cS, cT);
		}
	}

	private static String translate(String text,
			Map dictionary) {
		final char[] chars = text.toCharArray();
		for (int i = 0, n = chars.length; i < n; i++) {
			final Character found = dictionary.get(chars[i]);
			if (null != found)
				chars[i] = found;
		}
		return String.valueOf(chars);
	}

 

其中繁體字跟簡體字字字表,後面附上,因為大約有兩千五百字…..

他的方法和我以前的想法不一樣,因為我只是換字,不是換詞,所以他把字串拆開成陣列後,把文章帶進字碼表去搜尋,大概是hashmap 在這方面的高效率,所以可以快速提升執行效率

這是和上一篇同樣的樣本做的測試

總共花費 96089.0ms ;其中下載花費95658.0ms 資料處理花費  431.0ms

效率大概是使用JAVA 內建的replace()的80倍

簡繁字碼轉換表

 

看來我現在是要想辦法提高下載效率

Post to Twitter Post to Plurk Post to Facebook Send Gmail

JAVA提高String.replace() 執行速度的方法

繼續上一篇的內容,為了這些問題,我詢問了PTT 的 JAVA版,也很感謝有人替我解答,並教我如何提高replace 的效率

參考資料 https://www.facebook.com/java.tw 的 5月8日的文章

這個方法經過測試,應該可以使用正規表示式,但我測試的次數不夠多,也不保證其效率 <-免責聲明XD

 

簡單來說 就是 JAVA 官方提供的 String 中的 replace() 把所有的任務都當成正規表示式來處理,所以效率不彰,而如果我們只是要做單純的文字置換,顯然不需要那些步驟。

以下是程式碼+口語化只有我自己懂得演算法

 

public class Replace {
	public Replace() {
		// TODO Auto-generated constructor stub
	}

	public static String replace(String str, String patten, String replacement) {
		// str 要置換的字串 把patten換成 replacement
		int pos = str.indexOf(patten);
		return pos < 0 ? str : _replace(str, patten, replacement, pos);
	}
/**演算法說明
 * 
 * @param str 資料
 * @param patten 要換掉的文字
 * @param replacement 要改成的文字
 * @param pos 那段文字在哪
 * @return 
 * 1. 從頭開始找出符合的字串,並且標示第幾個字放進pos
 * 2. 先把在pos前面的字放進結果區(newContent)
 * 3. 再放進replacement
 * 4. 再去找下一個字的位置放進pos 
 * 5. 接續步驟三直到全部找完為止
 */
	public static String _replace(String str, String patten,
			String replacement, int pos) {
		int len = str.length();
		int plen = patten.length();
		StringBuilder newContent = new StringBuilder(len);

		int lastPos = 0;

		do {
			newContent.append(str, lastPos, pos);
			newContent.append(replacement);
			lastPos = pos + plen;
			pos = str.indexOf(patten, lastPos);
		} while (pos > 0);
		newContent.append(str, lastPos, len);
		return newContent.toString();
	}
}

經過我在小說下載器上的實際測試結果

效率提高的8倍左右

以下是測試數據,以一部124頁的小說當作測試樣本

使用String.repalce() :總共花費 112890.0ms ;其中下載花費80601.0ms  資料處理花費 32289.0ms

使用新的方法             :總共花費 71188.0ms ;其中下載花費67008.0ms 資料處理花費  4180.0 ms

下載花費時間取決於測試當下的網路狀況

 

Post to Twitter Post to Plurk Post to Facebook Send Gmail

JAVA 的字串替換

參考資料

http://satellite.iteye.com/blog/224820

http://lbs.iteye.com/blog/208056

http://hehome.blogspot.tw/2011/06/java.html

 

最近為了我的小說下載器,找了很多相關的資料

 

首先 String 的 replace() 和 replaceAll()的差別

這兩個都是做string 大量置換,只是 replace() 就只是單純的置換,而replaceAll() 支援 使用正規表示式

以下是例子(抱歉引用了 參考文章的)

         
        String src = new String("ab43a2c43d");
        System.out.println(src.replace("3","f"));=>ab4f2c4fd.
        System.out.println(src.replace('3','f'));=>ab4f2c4fd.
        System.out.println(src.replaceAll("\\d","f"));=>abffafcffd.
        System.out.println(src.replaceAll("a","f"));=>fb43fc23d.
        System.out.println(src.replaceFirst("\\d,"f"));=>abf32c43d
        System.out.println(src.replaceFirst("4","h"));=>abh32c43d. .

再來就是 另一種 使用 正規表示式的 大規模置換的方法,下面的範例是用來 過濾所有的HTML 的

 
          java.util.regex.Pattern p_html;
          java.util.regex.Matcher m_html; 

          String regEx_html = "<[^>]+>"; //定義HTML標籤的正則表達式 
          p_html = Pattern.compile(regEx_html,Pattern.CASE_INSENSITIVE);
          m_html = p_html.matcher(htmlStr);
          htmlStr = m_html.replaceAll(""); //過濾html標籤 


我剛剛理解了 兩者之間的差別
前者的作法,每次都要重新分析一次正規表示式,而後者可以指分析一次就重複使用

Post to Twitter Post to Plurk Post to Facebook Send Gmail

自己製作wordpress 佈景主題

相信對於一些wordpress 的初學者來說,一定都像我一樣,只是去找人寫好的直些使用,或是好一點改一改再使用 但是有時也會一些無力感,因為 功能強大的佈景主題難以上手,甚至沒有中文介面,簡單的佈景主題能修改的地方又太少,導致要找一個完全符合心中所想的佈景主題十分困難….

最近 我找到一套軟體可以直接解決這個問題,他使用類似 office2007 的介面,可以直接製作佈景主題(痾..想做成網站也OK啦),不過缺點是,他產生的後台有點弱..,不過看在他強大的製作功能,這些就可以無視了

在一開始要先聲明

  1. 他不是免費軟體,收費方式有 家庭版 49.99美金跟 標準版 129.99美金,家庭版只支援wordpress,標準版則多支援了druapl等多個架站軟體(詳細自己去網站上看)
  2. 安裝後不用註冊既可以使用,但是是測試版,不能存檔(但可以輸出成佈景主題),佈景主題會自動加上浮水印(基本上就是 沒付錢別想真正拿來使用,只給你體驗體驗)
  3. 購買後,一年內可以免費升級,一年後可持續使用但無法升級(我嘗試過了,直接安裝新版的就可以了)
  4. 我正在籌錢購買…(已經買了 現在的布景就是成品)

 

我現在是使用 artisteer 4製作,這個只是一個測試版,許多功能仍未完善,只是有一些3代沒有的功能(已經出了 四代正式版)

剩下的介紹 就請參考

http://blog.cmsart.net/

 

官方網站:http://www.artisteer.com/

軟體下載:http://www.artisteer.com/?p=download

 

如果看不慣簡體介面

可以在 ~~\Artisteer 3\Library\Data\Langs

底下找到Chinese.xml 把它簡轉繁就OK了

看不慣對岸用語? 自己改吧,不難

Post to Twitter Post to Plurk Post to Facebook Send Gmail

wordpress 修改首頁的文章顯示方式

參考資料 http://pangbu.com/get_template_part/

最近因為一些緣故,又要做wordrpess 網站

首先最大的麻煩是首頁的文章排列方式

 

修改的方法

外觀->主題編輯器

選擇你現在使用的主題,如果不能存檔,請先進到FTP裡修改檔案存取權限

首頁 修改是在 index.php,請仔細看內容

會找到

<?php while ( have_posts() ) : the_post(); ?>
		<?php get_template_part( 'content', get_post_format() ); ?>
<?php endwhile; ?>

這種東西

裡面總共出現了四個function

have_posts() 這個很好懂吧,有沒有文章

the_post () 這個應該是把文章取出一篇

get_template_part() 這個就是我們今天的重點了,這個變數目的是在 讓接下來的文章顯示可以有多種不同選擇

 

get_template_part($a,$b) 有兩個變數,簡單來說就是,執行後 系統會去選擇$a-$b.php 這個檔案去執行接下來的內容

而get_post_format()就是 依照文章格式,這是在你PO文的時候選擇的,如果你選標準就是啥都沒有

接下來 就是去找其他檔案的內容了

 

接下來我已我用 artisteer 產生的佈景主題為例

首頁的內容 會使用到content.php 這個檔案

    global $post;
    theme_post_wrapper(
        array(
                'id' => theme_get_post_id(),
                'class' => theme_get_post_class(),
                'thumbnail' => theme_get_post_thumbnail(),
                'title' => '<a href="' . get_permalink( $post->ID ) . '" rel="bookmark" title="' . strip_tags(get_the_title()) . '">' . get_the_title() . '</a>',
        'heading' => theme_get_option('theme_'.(is_single()?'single':'posts').'_article_title_tag'),
               'before' => theme_get_metadata_icons( 'date,author,edit', 'header' ),
               'content' => theme_get_excerpt(),
               'after' => theme_get_metadata_icons( 'category,tag,comments', 'footer' )
        )
    );

而這裡就是把資料放進array中到接下來的wrapper.php檔案中使用

依照之前的code 我們知道會執行theme_post_wrapper()

 

而這支佈景主題的作法是,一個公版,但是在前一個步驟你沒放資料進來就不會顯示內容

 

好 理解了應該就很好修改

要修改有兩種方法

比較簡單的

修改content.php 把不要的註解掉,這個最簡單,但是有可能影響到其他地方

比較複雜的,仿造從寫一個,從index.php開始修改,這樣改比較刺激XD

 

Post to Twitter Post to Plurk Post to Facebook Send Gmail

calibre 中文封面問題

參考網址 http://www.freemindworld.com/blog/2010/101022_calibre_tips_and_faq.shtml

 

說實話 這個問題困擾了我很久,只是最近才發現  calibre 可以裝外掛,就去找了問題的解決方法

calibre 在沒有另外設定的情況下,自動生成的封面,碰到中文字會變成問好,原因是 預設字體不支援中文 所產生的

教學中有兩種方法,我選擇的是 第二中,安裝外掛

 

1.在偏好設定中選擇 取得外掛程式以強化calibre

2.找尋Generate Cove 並安裝他

3. 就會產生新的按鈕可以 設計封面了

接下來就請自行摸索吧….

 

 

另外 如果手機是使用靜讀天下這套軟體的朋友,他在書櫃上顯示的封面 是另外存的暫存檔

請先把手機連至電腦後

進入 /sdcard/books/.Moonreader 裡面

裡面是放暫存的圖

把那些圖砍掉,之後再從新開電子書 就會改換新圖了

Post to Twitter Post to Plurk Post to Facebook Send Gmail

wordpress statpress 不正常運作

昨天接到總務處的通知,網站的流量統計出了問題….他停止運作了

 

WTF 這怎麼回事呢? 在那之前我好像只有修改過 log 設定 和佈景主題阿…..

好吧 去檢查LOG…..正常運作阿…佈景主題…..不太可能阿

 

不管了 先下個備份指令

這時我發現原因了

系統回報 有兩個table 出現錯誤,這剛好是statepress 運作的table (因為總務處網站是 MU的 所以會有多個)

我在網路上找了一些方法

 

以下是我的解決方法

  1. 打開phpMyAdmin
  2. 進入資料表清單 勾選要修復的
  3. 在底下有個拉霸 選擇修復列表
  4. 搞定收工

基本上它就會正常運作了

Post to Twitter Post to Plurk Post to Facebook Send Gmail

吉隆坡之旅遊記-行前準備

這次出國旅行,家父用了一個比較特殊的方法

就是向廉價航空訂購機票跟飯店,這使我們這次的旅費節省不少(這次我們五個人五天四夜 總個的旅費大約十萬,其中當地的現金+刷卡消費頂多兩萬,剩下的就是機票跟飯店)

平均每個人的 來回直達機票+ 4天 四星級的飯店(我們是兩個房間) 大約 一萬四千元,不過我們是 提前將近半年購買  是機票跟飯店都是跟 airaisa  不過因為是廉價的,所以在電話客服上….請要有心理準備

 

 

行程安排

這是自由行最重要的地方,簡單來說,自己上網找景點,想辦法用各種交通方式串接起來

吉隆坡 "基本上" 不是一個古城,所以比較不會有古蹟型的景點(有 但不多)

google map 是一個不錯的路線安排方式,但是請當參考

 

交通方式

吉隆坡 跟台北市一樣,有 捷運(據說是有2~3家公司)、公車、計程車

捷運:

捷運是最便宜也最容易上手的交通方式,每個站都有售票亭(也有售票機,但是那需要一點時間搞懂,而且好像不接受10馬幣以上的面額鈔票)

他們捷運的票價都不貴,我搭過最貴的也只有2馬幣(約20台幣),車站內沒冷氣,但是不向台北市的捷運 可以一票到底,每次換車都要重新買票,重新進出站,建議可以直接跟售票口買票,用英文說出目的地和人數就可以了。

不過有個比較特殊的地方,從KL SENTRAL (吉隆坡中心的一個大型轉運站)到 黑風洞的捷運(有點類似城市內的台鐵) ,去程1馬幣 回程2馬幣,據說是因為黑風洞是新的站的關係(沒錯,黑風洞站的所有進站出站都沒有機器檢查票XD)

 

公車:

那是給當地人搭的,所有的車站都沒有站牌,外地人無法上手的,不過有一個比較特殊的觀光巴士,一天38馬幣,大約30~60分鐘一班 (宣傳說20~30分一班 那是鬼扯),那是唯一一個有站牌的,你可以在每一站上下車,只要在第一次上車時買票就好,另外該觀光巴士的宣傳上說,有多國語言解說,有無線網路,這兩項是鬼扯,設備都壞了,只剩下馬來語跟英語,基本上如果不想要搞懂吉隆坡的交通,做這個大概就可以玩遍所有景點,總共22個站,我大概玩了4~5個就沒力了

 

計程車:

那是一個連當地華僑都說爛的交通方式,不像台灣都市的跳表,基本上都是用喊價的,想要跳表?ㄎㄎ 他們會騙外地人的,好在 在機場、各大百貨廣場、飯店都可以叫車,談好價錢,通常都是把錢付給叫車站,再憑票座車,可以省去很多風險。

 

貨幣兌換:

在台灣,馬幣相當難以兌換,因為它是屬於很少人使用的幣種,除了機場的銀行外,我在台北市只知道 台灣銀行總行才有提供,而且匯率的買賣價差高達三成,買馬幣匯率是 10.03換一馬幣,但是賣馬幣缺是 1馬幣換 7台幣,很恐怖的,所以換匯時請算準,不過當地很多地方都可以換匯,所以請放心。

Post to Twitter Post to Plurk Post to Facebook Send Gmail

適用電子郵件訂閱網站

輸入你的電子郵件地址訂閱網站的新文章,使用電子郵件接收新通知。

訂閱 9 其他用戶

交換連結

Copyright © 2018. All Rights Reserved.

歡迎光臨
初音