發表文章

目前顯示的是有「Java」標籤的文章

Java 教學及程式範例大全

圖片
以下是我這幾年來所寫過的教學及解決問題的記錄, 依項目整理如下,希望對大家有幫助。 Java 基本應用、程式執行時間、系統資訊: Java:程式執行時間計算 System.getProperty的參數用法 Java:instanceof 運算子用法說明 陣列處理、資料結構如Map、Set、List、排序: Java:陣列與字串轉換,Array to String 和 String to Array Java:移除陣列Array中重複的值 Java:針對Array中的值作排序 HashMap的應用及資料排序 將List做排序的方法 走訪List的方法 字串處理: StringBuilder和StringBuffer的差別及清空內容方式 時間日期輸出入、單位轉換與設定、時間間隔計算: Java:日期時間格式化輸出入處理:Date、Calendar、SimpleDateFormat Java TimeUnit:時間單位轉換與時間日期間隔計算 設定檔: java.util.Properties的應用:setProperty, getProperty, storeToXML, loadFromXML Thread、Thread Pool: Java:超簡單 Thread Pool 功能實作 Java:ArrayList如何達成執行緒安全(Thread Safe) Java:呼叫function後更新畫面的問題 StringBuilder和StringBuffer的差別及清空內容方式 Log、日誌: Java:Log4j 的簡單教學 Logback, Log4j 設定檔自動產生器 Json: JSON in JAVA 的簡單程式範例 Java:JSON.jar 下載與JSON source code 打包教學 Regular Expression: java.util.regex正規式的應用:Pattern和Matcher Eclipse 好用套件:Regular Expression Tester Online Regular Expression Tester:線上正規式測試驗證工具網站 排...

在網頁中嵌入顯示程式碼:CSS Block

圖片
全系列顯示效果比較已完成,可參考: 在網頁中嵌入顯示程式碼:全系列效果比較及教學整理 , 選擇自己較想要的效果後再進入單篇文章看每種外掛的設定教學。 三年多前開始在部落格中放上程式碼記錄自己的學習和解決的問題時, 我找到了 HighLight 這個程式,安裝軟體後將程式碼轉換為 html, 而後再直接放到部落格文章中嵌入顯示, 相關的說明文章在: 在網頁中嵌入顯示程式碼:HighLight 在多年後,有時會覺得我想放上的並不是一大篇的程式, 而只是小小一段設定檔如:css 的連結設定、javascript的設定檔等, 這時如果還要將設定貼進軟體作軟換,感覺就有點太廢工了。 我只是想要在文章中顯示,想要有個特別的區塊讓程式碼可以突出啊! 後來有一天又看到在他人的部落格中很常見的程式顯示區塊, 像這樣的: 顯示程式碼 因為覺得這種顯示方式相當簡潔且清楚, 於是終於在 Blogger Code block_文章顯示程式碼區塊 找到設定的方式, 他是透過 CSS 的方式來展現程式碼, 對於可以更改 CSS 的部落格如現在所使用的 Blogger, 只要依下面的教學將設定的程式碼嵌入 template 中即可。 圖片來源: http://www.csscafe.com/ 嵌入步驟(以Blogger為例): 第一步: (新版程式碼已不需要修改 html,直接看第二步) 進入Blogger後台(登入後在Toolbar右上點選設計), 選擇範本 -> 修改HTML -> 繼續。 第二步: (2013.11.01更新) 先前的舊版程式碼需放在 html裡面, 現在建議放在HTML/JavaScript小工具裡比較方便管理! 藍色的部份是新舊版的差異,主要就是style的tag及將gif用另一種格式寫死不用再連線。 直接新增一個HTML/JavaScript小工具,位置任意擺,建議放在最下面, 名稱空白,內容填入以下整段程式碼。 <style> .post .codeblock { display: block; /* fixes a strange ie margin bug */ font-family: Courier New; font-size: 10pt; ov...

在網頁中嵌入顯示程式碼:Google Code Prettify

圖片
全系列顯示效果比較已完成,可參考: 在網頁中嵌入顯示程式碼:全系列效果比較及教學整理 , 選擇自己較想要的效果後再進入單篇文章看每種外掛的設定教學。 在上一篇  在網頁中嵌入顯示程式碼:CSS Block  中, 我們介紹了如何使用 CSS 的效果來顯示程式碼區塊, 然而和這系列第一篇的 HighLight 軟體  效果比超來, 就少了將程式碼上色的功能,程式看起來比較不清楚。 圖片來源: http://www.iconpng.com/icon/12681 這篇我們要介紹的是  Google Code Prettify , 這是由 Google 所推出,且已大量運用於 Google Code 網站的輕量語法上色工具, 如果讀者曾經使用 Google API 開發程式,相信對他所產生的程式碼顏色一定很熟悉, 因為這此顏色都是同一套程式所產生的。 今天一樣透過他,我們就可以將文章中的程式碼語法上色, 且設定上也非常簡單,以下就是安裝步驟。 (2013.11.01更新) 先前的舊版程式碼需放在 html裡面,且需要呼叫 onload 影響網頁載入 現在建議放在HTML/JavaScript小工具裡比較方便管理,而且程式也變簡捷了! 以下這一行取代了先前的步驟一、二,接下來直接看步驟三即可~ <script src="//google-code-prettify.googlecode.com/svn/loader/run_prettify.js"></script> 舊版步驟一:在 blogger template 中的 <head> 和 </head> 間插入以下語法 <link href='http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.css' type='text/css' rel='stylesheet' /> <script type='text/javascript' src='http://google-code-prettify.googlecode.com/s...

線上學 Regular Expression 語法

圖片
先前寫了幾篇關於正規式Regular Expression 的文章,分別是: java.util.regex正規式的應用:Pattern和Matcher Eclipse 好用套件:Regular Expression Tester Online Regular Expression Tester:線上正規式測試驗證工具網站 其中第一篇簡單介紹了在 Java 中如何使用 regular expression, 而後來兩篇就是驗證工具了,只差在一個是 Eclipse Plugin,另一個是線上網站。 至於為什麼要有驗證工具呢?就是因為 regular expression 的語法很不好懂嘛, 至少用人腦去判斷的話有時會卡卡的轉不過來。 因為 Regular expression 的語法很多, 所以如果想要上手最好是有個教學再搭配例子或練習,這樣才學得快! 今天要介紹的就是 RegexOne  這個簡單又互動式的學習網站~ 一進到網頁其實就開始課程了,每一課主要分為三大區塊, 首先在右側 (下圖橘框),可以看到所有語法以及目前學習的進度, 中左上方 (下圖綠框) 則是這一課的教學內容,雖然是英文但蠻好懂的。 下方 (下圖紫框) 則是每一課的練習,輸入語法後會馬上將結果顯示出來, 注意每個 Task 可能會有 MATCH 或 SKIP 之類的目的,全部通過後才可以前往下一課唷。 其實網站很直覺好用也沒什麼好再介紹的了,有需要的人可以去玩一下 ^^ 本文出自符碼記憶,請勿全文轉載,部份轉載請註明出處 關鍵字:Regular Expression, regex, 線上, 語法 學習, 教學, 網站, 正規式, 正則式, java 參考資料: RegexOne

Chrome Plugin:JSON Formatter 格式化輸出顯示json

圖片
對每個程式開發人員而言,我們常常需要資料的傳遞, 而目前最常見的幾種資料傳遞方式中,又以 XML 及 JSON 最常見。 關於 JSON 先前我有寫過兩篇文章,有需要者可以先參考。 Java:JSON in Java 的簡單程式範例 Java:JSON.jar 下載與JSON source code 打包教學 圖片來源:http://www.widgetpress.com/formentry/json 雖然 JSON 的格式定義非常簡單清楚,用程式也很容易 parse, 但當資料量一大、結構一複雜,要用人眼判斷還是相當辛苦, 舉簡單的例子,在 這個網站 中有個 Demo連結 是用 JSON 回傳資料, 如果我們直接用瀏覽器開啟,可能會看到這樣的畫面: 即使把字再怎麼放大,對人而言要直接判斷整個資料結構還是相當困難, 因此今天要介紹的就是一個 Google Chrome 的 Plugin: JSON Formatter , 在安裝了這個套件後資料便整齊許多,也判斷簡單的數據格式上色, 使用時還可以依需要將部份結果的節點縮起來,非常方便。如圖: 這個套件也有選項可以讓我們隨時切換為 raw data, 算是一個相當不錯的小工具喔! 如果在程式開發上有處理 json 的需求,不妨參考一下 ^^ 本文出自符碼記憶,請勿全文轉載,部份轉載請註明出處 關鍵字:Chrome, Plugin, JSON Formatter, json, format, 格式化輸出, 顯示 參考資料: Chrome Plugin:JSON Formatter

Java Concurrent ScheduledExecutorService:定期排程的 thread pool

圖片
先前介紹過了使用 Java Timer 來達成工作排程的效果, 也介紹了 Java 內建超簡單的 Thread Pool 機制, 今天則是要來結合這兩者, 使用 Thread Pool 裡的 Thread 來執行定期排程的工作! 在開始之前,建議的大家可以先看一下先前的相關文章: Java Timer:排程、定時、週期性執行工作任務 Java Timer:schedule和scheduleAtFixedRate有何不同 Java:超簡單 Thread Pool 功能實作 圖片來源:http://www.backupforall.com/backup%20scheduler.php 下面的程式中首先我們在 constructor 裡取得 2條 Thread 的 Scheduled Thread Pool, service = Executors.newScheduledThreadPool(2); 接著一次進行一項測試,分別為: testScheduleWork、testScheduleOutdatedWork 及 testScheduleMultiWork。 完整程式碼如下: package werdna1222coldcodes . blogspot . com . demo . scheduleTask ;   import java . text . ParseException ; import java . util . Date ; import java . util . concurrent . Executors ; import java . util . concurrent . ScheduledExecutorService ; import java . util . concurrent . TimeUnit ;   public class ScheduledThreadPoolDemo {   public static void main ( String [] args ) throws ParseException {   ScheduledThreadPoolDemo demo = n...

TIOBE Programming Community Index for July 2012

圖片
這個 index 可代表全球程式語言的受歡迎程度, 若想看介紹可以參考我在 2008年11月時所寫的介紹文章, 裡面也有當時的各項數據,若有興趣可以和現在的數字作比較。 圖片來源:http://newtech-cafe.blogspot.tw/2012/01/popularity-of-programming-languages.html 2012年這段時間裡這項指數似乎有不小的變化, 在四月的時候是 Java 被 C超越, TIOBE : C overtakes Java as the No.1 programming language , 當時的數據排名如下: 2012年 7月的頭條似乎有點更大條,那就是 C++ 已被 Objective-C 幹掉了! 不得不說蘋果真的相當強大! July Headline: Objective-C overtakes C++ 2012/07 的數據排名如下: 成長趨勢圖如下: 參考資料: TIOBE Programming Community Index   

HttpClient:透過get stream下載儲存檔案

圖片
使用 Apache HttpClient 4.2, 透過 http get 指令將回傳之 Stream 以檔案儲存。 圖片來源:http://ditchnet.org/httpclient/ 程式如下: 1 package werdna1222coldcodes . blogspot . com . demo . httpclient ; 2 3 import java . io . BufferedInputStream ; 4 import java . io . FileOutputStream ; 5 import java . io . IOException ; 6 import java . io . InputStream ; 7 import java . io . OutputStream ; 8 9 import org . apache . commons . io . IOUtils ; 10 import org . apache . http . HttpHost ; 11 import org . apache . http . HttpResponse ; 12 import org . apache . http . client . HttpClient ; 13 import org . apache . http . client . methods . HttpGet ; 14 import org . apache . http . conn . params . ConnRoutePNames ; 15 import org . apache . http . impl . client . DefaultHttpClient ; 16 17 public class HttpGetDownloadFileDemo { 18 19 public static void main ( String [] args ) { 20 21 HttpClient client = new DefaultHttpClient (); 22 HttpGet get = new ...

Java:instanceof 運算子用法說明

圖片
Java 的 instanceof 運算子是一個二元運算子, 二元運作子接受兩個參數,通常是用來比較兩個參數間的關係, 常見的二元運算子有 ==, > , < 等等。 圖片來源:http://www.zazzle.com/java+code+gifts 那麼 instanceof 這個運算子是用來比較什麼關係呢? 他的用法是這樣的:objectA instanceof ClassName, 這是要測試某一物件 objectA 是否為某類別 (class)或其子類別 (subclass) 實例 (instance), 或是 objectA 是不是某介面 (interface) 的實作。 當 objectA 屬於該 class (或其衍生類別) 的 instance 就會回傳 true;否則傳回 false。 所以 instanceof 可以被用在繼承的關係中, 需特別注意的是,比較時物件與類別間要有繼承關係,否則會有compile error如: "myInstanceof.java": Error #: 365 : cannot compare java.lang.Long with java.lang.String 另外要說明的是,我們知道在 Java 中所有的 class 都是繼承 Object 這個 class, 所以理論上任意的 objectA instanceof Object 都應該回傳 true, 這是錯的!當 objectA 指向 null 時這個條件判斷會回傳 false 喔!千萬注意! 另外 Java 中還有基本型別如 int, byte, boolean 等, 這些基本型別沒辦法使用 instanceof 這個運算子, 必須是 Integer, Byte, Boolean 這些物件化的才可以使用喔! 除了任意物件都會繼承 Object 外,任何陣列也都繼承Object, 所以所有的物件陣列都將同時繼承 Object 和 Object[]。 基本型別的陣列同樣會繼承Object, 但因為基本型別不是物件,所以基本型別陣列不會繼承 Object[]。 關鍵字:java instanceof, 泛型, boolean, exception, oper...

Java:針對Array中的值作排序

圖片
上兩篇針對陣列與字串轉換、陣列移除重複項目作了介紹, 有興趣可以先參考: Java:陣列與字串轉換,Array to String 和 String to Array Java:移除陣列Array中重複的值 圖片來源: http://www.easyvectors.com/browse/other/number-sorting-game-clip-art 這篇則是要介紹如何對陣例中的值或字串作排序, 排序的方法有很多種, 好奇的話可以參考許久以前的文章, Sorting Algorithms:排序演算法 , 當中有一段 youtube 上的影片,詳細地介紹了各種排序方法。 下面的程式碼除了介紹把陣列中的項目作排序外, 也同場加映利用 TreeSet 同時將陣列作排序及移除重複項目。 適度地利用 Java 內建的資料結構,可以省下超多工喔! 1 package werdna1222coldcodes . blogspot . com . demo . array ; 2 3 import java . text . ParseException ; 4 import java . util . Arrays ; 5 import java . util . Set ; 6 import java . util . TreeSet ; 7 8 public class ArraySortDemo { 9 10 public static void main ( String [] args ) throws ParseException { 11 12 // 建立有重複項目之 int array 13 int intArray [] = { 4 , 2 , 5 , 1 , 5 , 2 , 4 , 3 }; 14 15 // 利用 Arrays.sort 來排序 16 // 輸出結果:[1, 2, 2, 3, 4, 4, 5, 5] 17 arraySort ( intArray ); 18 19 // 使用 20 T...

Java:移除陣列Array中重複的值

圖片
隱隱感覺到發展為系列文的跡象, 之前一篇介紹的是陣列與字串的轉換, 連結在: Java:陣列與字串轉換,Array to String 和 String to Array  。 而這一篇則是要簡單介紹一下如何移除陣列中重複的值或項目。 圖片來源: http://blog.vinhkhoa.com/article/3-functions-to-extend-Coldfusion-array 要達到移除陣列中的重複項目,傳統的作法是另外建一個陣列, 然後在每次把新項目加入之前檢查新陣列中是否已有應項目。 上面的想法很直覺,但實作起來最難的地方應該是不知道新陣列該建多大, 不過可以利用 ArrayList 加入項目後再轉為陣列即可。 除了上面所說的方法外,下面的程式碼是直接利用 Set 中項目或值不會重複的特性, 只要一個一個把值放進去,就可以自動移除重複的項目了!超簡單! 1 package werdna1222coldcodes . blogspot . com . demo . array ; 2 3 import java . text . ParseException ; 4 import java . util . HashSet ; 5 import java . util . Set ; 6 7 public class ArrayRemoveDuplicateDemo { 8 9 public static void main ( String [] args ) throws ParseException { 10 11 // 建立有重複項目之 int array 12 int duplicateArray [] = { 4 , 2 , 5 , 1 , 5 , 2 , 4 , 3 }; 13 14 // 利用 Set 的特性,將所有項目放入 Set 15 中即可移除重複的項目 16 Set < Integer > intSet = new HashSet < Integer >(); 17...