2007年12月22日

StringTokenizer

http://eason982.blogspot.com/2007/12/stringtokenizer.html
某字串 String str="abc"def" ;
切成 abc & def
StringTokenizer token=new StringTokenizer(str,"\ " ");

PS. 轉義字符  "\ " "

2007年12月21日

Set Java VM Memory Size in NetBeans

http://eason982.blogspot.com/2007/12/set-java-vm-memory-size-in-netbeans.html
在NetBeans下某Project右鍵點開 :
Properties >> Categories >> Run >> VM Options >> 設定!(-Xmx512m)

2007年12月19日

Java Garbage Collection

http://eason982.blogspot.com/2007/12/java-garbage-collection.html
自動記憶體管理也就是俗稱的垃圾收集(garbage-collection),可以讓程式員減輕許多負擔,也減少程式員犯錯的機會,所以相當受歡迎。從早期的 Smalltalk,Eiffel,到近期的 Java,C#,Python,REBOL,Ruby... 等,通通支援垃圾收集。垃圾收集差不多已經成了新一代高階程式語言必備的功能。

在 Java 中,你不需要主動刪除物件,而是由 Java 虛擬機器代勞。Java 虛擬機器會「持續追蹤」每個物件被使用的情形,如果某物件未被用到,Java 虛擬機器就會自動將其釋放。而要如何「持續追蹤」,實作細節留給 Java 虛擬機器的實作者發揮。

在早期,許多虛擬機器只是將垃圾收集實作成一個執行緒,一再進行檢查,遇到垃圾就釋放其記憶體。因為垃圾收集應該盡量不要影響到原程式的執行,所以虛擬機器將此執行緒的優先權設為 0(最低)。如此一來,當系統有其它執行緒在運作時,就不會進行垃圾收集,所以常常很久才會收集到垃圾,造成記憶體不足。但又不能因此調高其優先權,否則對 Java 的執行效率是一大打擊。所以,我們這些 Java 程式員的電腦 RAM 都要至少 256 MB,否則根本沒辦法順利執行 JBuilder 或 VisualAge for Java 等 Java 開發工具,因為這些開發工具本身就是專門吃記憶體的 Java 程式。我甚至在我的筆記型電腦上裝了 512MB 的 RAM。

於是許多人懷念起 C/C++ 來了,他們認為如果 Java 能同時支援自動記憶體管理和手動記憶體管理,那麼該有多好!他們甚至希望 Java 未來的版本能允許他們主動釋放記憶體,比方說:

MyBigObject obj = new MyBigObject();

// do something here...

delete obj;

如果你也這麼希望的話,我勸你早點死了這條心吧!Java 語言的主要精神之一是 robust,如果 Java 同時支援這兩種記憶體管理的話,可能會造成程式中有許多潛在的 Bug,記憶體不當存取的問題會比 C/C++ 更嚴重,所以是不可能這麼做的。

java.lang.System.gc() 或 java.lang.Runtime.gc() 的 gc 指的就是 garbage-collection,不過根據文件的說明,它的作用只是「建議」Java 虛擬機器快去收垃圾,而不「保證」會去收垃圾。文件都寫得如此謙虛了,你也不應該對它寄予太多厚望。對於記憶體資源消耗太多的缺失,目前你能做的是:

1. 改用一個記憶體管理方式好一點的虛擬機器:垃圾收集是一個豐富又龐大的主題。垃圾收集的
演算法有數百種可能,而且各有專長。許多虛擬機器採用的演算法都不太一樣,建議各位多去
比較幾家。

2. 少製造垃圾:許多時候你製造了一堆不該製造的垃圾,比方說:該用固定式陣列的時候卻用
Vector,該用 StringBuffer 的時候卻用 String...... 等等。這麼會製造垃圾,再多記憶體也不夠
用。

3. 不再使用的物件要盡早設定為 null,以便早點被當成垃圾清掉。

4. 花錢多買一些 RAM(砸錢解決問題)。

HTML Tags

http://eason982.blogspot.com/2007/12/html-tags.html

html語法標籤中有以下特殊字元標籤(紅色字部分即是標籤代表的字元)


&lt : "<" 字元

&gt : ">" 字元

&amp : "&" 字元

&quot : """ 字元

&nbsp : 空白字元

&reg : trademark

&copy : copyright

DOM文件作業和XML文件互相轉換的java實作

http://eason982.blogspot.com/2007/12/domxmljava.html
簡介︰該文簡要描述了 DOM 的概念和內部邏輯結構,提供了 DOM 文件作業和 XML 文件互相轉換的 java 實作過程。

1. DOM簡介

目前,W3C 已於2000年11月13日推出了規範 DOM level 2。文件物件模型(DOM)是 HTML 和 XML 文件的程式化介面規範,它與平台和語言是無關的,因而可以用各種語言在各種平臺上實作。該模型定義了 THML 和 XML 文件在記憶體中的邏輯結構(即為文件),提供了存取、存取 THML 和 XML 文件的方法。利用 DOM 規範,可以實作 DOM 文件和 XML 之間的相互轉換,巡訪、作業相應 DOM 文件的內容。可以說,要自由的操縱 XML 文件,就要用到 DOM 規範。


2. DOM 內部邏輯結構

DOM 文件中的邏輯結構可以用節點樹的形式進行描述。透過對 XML 文件的解析處理,XML 文件中的元素便轉換為 DOM 文件中的節點物件。DOM 的文件節點有 Document、Element、Comment、Type 等等節點類型,其中每一個 DOM 文件必須有一個 Document 節點,並且為節點樹的根節點。它可以有子節點,或者葉子節點如 Text 節點、Comment 節點等。任何的格式良好的 XML 文件中的每一個元素均有 DOM 文件中的一個節點類型與之對應。利用 DOM 介面將 XML 文件轉換成 DOM 文件後,我們就可以自由的處理 XML 文件了。


3. java 中的 DOM 介面

DOM 規範提供的 API 的規範,目前 Sun 公司推出的 jdk1.4 測試版中的 java API 遵循了 DOM level 2 Core 推薦介面的語義說明,提供了相應的 java 語言的實作。

在 org.xml.dom 中,jkd1.4 提供了 Document、DocumentType、Node、NodeList、Element、Text 等介面,這些介面均是存取 DOM 文件所必須的。我們可以利用這些介面建立、巡訪、修改 DOM 文件。

在 javax.xml.parsers 中,jkd1.4 提供的 DoumentBuilder和DocumentBuilderFactory 組合可以對 XML 文件進行解析,轉換成 DOM 文件。

在 javax.xml.transform.dom 和 javax.xml.transform.stream 中,jdk1.4 提供了 DOMSource 類別和 StreamSource 類別,可以用來將更新後的 DOM 文件寫入產生的 XML 文件中。


4. 範例程式

4.1 將 XML 文件轉換成 DOM 文件

這個過程是獲得一個 XML 文件解析器,解析 XML 文件轉換成 DOM 文件的過程。

Jdk1.4中,Document介面描述了對應於整個XML文件的文件樹,提供了對文件資料的存取,是該步驟的目標。Document 介面可以從類別 DocumentBuilder 中取得,該類別含有了從 XML 文件獲得 DOM 文件實體的 API。XML 的解析器可以從類別 DocumentBuilderFactory 中取得。在 jdk1.4 中,XML 文件轉換成 DOM 文件可以有如下程式碼實作︰

//獲得一個 XML 文件的解析器

DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();

//解析 XML 文件產生 DOM 文件的介面類別,以便存取 DOM。

DocumentBuilder builder =
factory.newDocumentBuilder();

document =
builder.parse( new File(FileName) );





4.2 巡訪 DOM 文件
獲得介面類別 document 實體後,可以對 DOM 的文件樹進行存取。要巡訪 DOM 文件,首先要獲得 Root 元素。然後獲得 Root 元素的子節點清單。這裡透過遞迴的方法實作巡訪的目的。




//獲得 Root 元素

Element element = document.getDocumentElement();

//獲得 Root 元素的子節點清單

nodelist = element.getChildNodes();

//用遞迴方法實作 DOM 文件的巡訪

GetElement(nodelist);

其中 GetElement 方法實作如下︰

public void GetElement(NodeList nodelist){

Node cnode;

int i,len;

String str;



if(nodelist.getLength() == 0){

// 該節點沒有子節點

return;

}

for(i=0;i 1)

System.out.println(" "+str+" "+len);

}

}

}



4.3 修改DOM文件
修改 DOM 文件的 API 在 DOM level 2 Core規範中做了說明,jkd1.4 中的 org.xml.dom 中實作了這些 API。修改 DOM 文件作業主要集中在 Document、Element、Node、Text 等類別中,這裡給出的例子中是在解析出的 DOM 文件中增加一系列物件,對應與在 XML 文件中增加一條記錄。


// 獲得 Root 物件

Element root = document.getDocumentElement();

// 在 DOM 文件中增加一個 Element 節點

Element booktype =
document.createElement("COMPUTES");

//將該節點轉換成 root 物件的子節點

root.appendChild(cdrom);

//在 DOM 文件中增加一個 Element 節點

Element booktitle =
document.createElement("Title");

//將該節點轉換成 booktype 物件的子節點

booktype.appendChild(booktitle);

//在 DOM 文件中增加一個 Text 節點

Text bookname =
document.createTextNode("understand Corba");

//將該節點轉換成 bookname 物件的子節點

booktitle.appendChild(bookname);



4.4 將 DOM 文件轉換成 XML 文件



// 獲得將 DOM 文件轉換為 XML 文件的轉換器,
在 jdk1.4 中,有類別 TransformerFactory

// 來實作,類別 Transformer 實作轉換 vPI。

TransformerFactory tfactory =
TransformerFactory.newInstance();

Transformer transformer =
tfactory.newTransformer();

// 將 DOM 物件轉換為 DOMSource 類別物件,該物件表現
為轉換成別的表達形式的訊息容器。

DOMSource source =
new DOMSource(document);

// 獲得一個 StreamResult 類別物件,該物件是 DOM 文件
轉換成的其它形式的文件的容器,可以是 XML 文件,
純文字文件,HTML 文件。這裡為一個 XML 文件。

StreamResult result =
new StreamResult(new File(“text.xml”));

// 呼叫 API,將 DOM 文件轉換成 XML 文件。

transformer.transform(source,result);


gold coast optometrists
gold coast optometrists Counter

2007年12月18日

StringBuffer

http://eason982.blogspot.com/2007/12/stringbuffer.html
1. 處理大資料量時, 用StringBuffer能解決Out of Heap memory的問題

2. 清空StringBuffer :

1
2

StringBuffer str=new StringBuffer();
Str.delete(0,Str.length());

2007年12月17日

Bat File

http://eason982.blogspot.com/2007/12/bat.html
一些Windows批次檔(Batch File)專用指令:

1.rem:批次檔的註解,可增加批次檔的閱讀性,類似Java的單行註解//。


2.echo:將文字輸出於螢幕上,類似Java的System.out.print()。


3.echo on:將批次檔內所下的指令全部顯示在螢幕上。


4.echo off:批次檔內所下的指令全部隱藏,不顯示於螢幕上。


5.goto:轉移控制權,可以指示批次檔跳至某一標記。


6.@:前面加上@符號的指令,執行批次檔時不會將指令文字敘述顯示於螢幕上。


7.%:批次檔參數,最多可以有10個參數值(由%1至%10),於批次檔內類似Java

的main(String[] args)參數用法,%1等於args[0]。


8.pause:暫停批次檔的執行,並在螢幕上顯示Press any key to continue。


9.if exist:檢查某一檔案是否存在,若存在則條件成立,執行指定的命令。例n

1
2
3
4

@echo off
rem 檔名:test.bat
if exist Test.java javacBatTest.bat
echo Test.java檔案不存在



1
2
3
4
5
6

@echo off
rem 檔名:javacBatTest.bat
javac Test.java
java Test
echo 程式執行完畢
pause




如果Test.java不存在的話,執行test.bat會顯示出Test.java檔案不存在。
如果Test.java存在的話,執行test.bat時便會呼叫javacBatTest.bat,然後
編譯與執行Test.java並將結果顯示於螢幕上。


10.if 字串1==字串2:2字串相等的話,則執行所指定的指令。

11.if not:當測試條件不成立時才執行後面命令。例:

1
2
3
4
5

@echo off
rem 檔名:test2.bat
if %OS% == Windows_NT echo 此作業系統為NT架構
if not %OS% == Windows_NT echo 此作業系統非NT架構!
pause



如果執行此BAT的作業系統是NT、2000、XP pro則會顯示"此作業系統為NT
架構",如果為98、Me、XP home則會顯示"此作業系統非NT架構"。


12.if errorlevel:由OS所管理的一個系統變數,目的是監視所有錯誤發
生的情況。

13.call:模組化設計,可用來呼叫另一個批次檔,類似java中method的呼叫。


2007年12月12日

判斷中文字

http://eason982.blogspot.com/2007/12/blog-post.html
boolean isTraditionalChineseCharacter(char c) {
Character.UnicodeBlock block =
Character.UnicodeBlock.of(c);

if(!
Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS.equals(block) &&!
Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS.equals(block) &&!
Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A.equals(block))
{
return false;
}


try {
String s = ""+c;
return s.equals(new String(s.getBytes("MS950"), "MS950"));
} catch (java.io.UnsupportedEncodingException e) {
return false; }
}

2007年12月6日

ANSI、BIG5 與 UTF-8

http://eason982.blogspot.com/2007/12/ansibig5-utf-8.html
使用哪種編碼好?
 UTF-8 可以處理多國語言,Big5 不行,所以我自己的習慣是 ColdFusion 連MySQL 設定 UTF-8 編碼 ( 所以 MySQL 內儲存的通通是 UTF-8 資料 )、<cfprocessingdirective> 那三行程式我也設 UTF-8、若有 meta 標籤宣告編碼,我也宣告為 UTF-8、Dreamweaver 預設編碼我也設 UTF-8,反正能設 UTF-8 的我通通都用 UTF-8,就不會在任何一個環節發生亂碼的問題了。

ANSI 檔跟 UTF8 檔的差別
 UTF-8 編碼的範圍包括了 ANSI,在 UTF-8 中有維持原來的 ANSI 字元編碼,所以我們才會在發現亂碼的時候都是中文或日文等變成亂碼,英文字都正常顯示。