2013年2月19日 星期二

[Java&Android]撰寫程式常用之好用方法(函式)

物件導向大補丸

[JAVA]JAVA物件導向引言:類別與物件的基本概念(轉載)


[Java]1-物件導向大補丸 Class 類別與巢狀類別(內部類別)


[Java]2-物件導向大補丸 static/instance/final、this/super、繼承(Overload/Override)/多型



[Java]3-物件導向大補丸 Interface、Abstract、建構子



JAVA進階
排序 &資料儲存 &處理
HashMap
Survey1:符碼記憶 - HashMap的應用及資料排序
Survey2:技术天地 -HashMap 使用小结
ArrayList


CharArray


Java基本輸出與檔案管理


Java加密應用

Socket / RMI


JDBC:
佛祖球球-[Java]JDBC access MySQL
Java Gossip: 連接資料庫
Lesson: JDBC Introduction(英文)


UI(Swing 使用Netbean建構):


IDE:

Android應用

神的領域Design Patterns (設計模式)
史帝芬心得筆記 -- Design Patterns (設計模式)

程式開發前注意事項:


1.反省寫法並改變。
2.不要養成在函式開頭宣告並初始化所有變數。這就是會導致bug的元兇。
因為變數在開頭就被初始化,這樣在真正要用到它的時候就能直接拿來用,但是如果這個變數需要被歸零(也就是重新初始化)並在迴圈中重複利用,就很容易會忘記要再多做這一步。(在多層迴圈中更容易發生),所以養成好的coding style,改變宣告變數的習慣。一開始就在迴圈內宣告並給定變數的初始值,而不是在函式開頭宣告,就不會有這種bug跑出來了。
3.永遠在變數需要被用到的最內層區塊才宣告並初始化該變數。
4.好的變數命名規則,不要將整個程式塞在main裡。

-----------------------------------------------------------------------

初階演算法

中高階演算法

  • HashMap:
        Map map = new HashMap ();
         map.put("justin", "justin's message!!");
        map.put("momor", "momor's message!!");
        map.put("caterpillar", "caterpillar's message!!");
                Collection collection = map.values();
        Iterator iterator = collection.iterator();
        while(iterator.hasNext()) {
            System.out.println(iterator.next());
        }
在這邊由於HaskMap有自己的排序方法,所以導出的資料順序會和存進的先後順序不同,若想保留原本的順序可使用
Map map =  new LinkedHashMap ();





------------------------------------------------------------------ 檔案讀寫類

XML
讀取root的值(沒有子節點,只有root帶值):root.getElementsByTagName("root的tag值").item(0).getFirstChild().getNodeValue();

System.arraycopy:Bytecode 合併

System.arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
src:源数组; srcPos:源数组要复制的起始位置;
dest:目的数组; destPos:目的数组放置的起始位置; length:複製的長度。
注意:src and dest都必须是同类型或者可以进行转换类型的数组.
此函数可實現自我複製如:
int[] fun ={0,1,2,3,4,5,6}; 
System.arraycopy(fun,0,fun,3,3);
結果為:{0,1,2,0,1,2,6};
实现过程是这样的,先生成一个长度为length的临时数组,将fun数组中srcPos 
到srcPos+length-1之间的数据拷贝到临时数组中,再执行System.arraycopy(临时数组,0,fun,3,3).


------------------------------------------------------------------ 資料型態轉換

如何將字串 String 轉換成整數 int? 
A. 有兩個方法: 
1). int i = Integer.parseInt([String]); 或 
i = Integer.parseInt([String],[int radix]);

 
2). int i = Integer.valueOf(my_str).intValue(); 
注: 字串轉成 Double, Float, Long 的方法大同小異. 


如何將整數 int 轉換成字串 String ? 
A. 有三種方法: 
1.) String s = String.valueOf(i); 
2.) String s = Integer.toString(i); 
3.) String s = "" + i; 

注: Double, Float, Long 轉成字串的方法大同小異. 


[Java&Android]程式語言中2,8,10,16,32進制轉換


字串過濾與處理
編排

Java 產生不重覆亂數 轉載



//比對值 忽略大小寫
a.equalsIgnoreCase(b);//比對字串內容 忽略大小寫
a.equals(b); //比對字串內容

.endWith("ed");//篩選字串字尾為ed的字串

======================

replace、replaceAll、replaceFirst字串取代

replaceAll (要被取代的字串,要取代的字串)   取代全部找到的”要被取代字串”
replaceFirst (要被取代的字串,要取代的字串)  取代第一個找到的”要被取代字串”
其中replaceAll函數可以使用正規表示式來做整批有規則性的取代

replace();
===========================
.trim();//去掉字串左右兩邊的空白
length()可以取回字串的長度

split字串切割

.split(";");//split(指定符號) ,可依指定符號把字串分開成陣列

sort();

================================
IndexOf應用
str.IndexOf("abc");
還有另外一種
if(str.indexOf(":=")!= -1)  //-1表示找不到,換句話說就是不為-1就是代表有找到這個字串
判斷str字串中是否包含:= 的字串 再進去做.
另一用法:
OK = Long.parseLong(str.substring(str.indexOf("c=")+2, str.length()));
//將c=後的字串 存到OK變數裡


字串比對
常用的比對以 intern() 取代 equals()String物件呼叫intern()時,會從JVM的string Pool(或是Hashtable)裡尋找是否有與此字串物件相等的字串,有則回傳,無則先加入至string pool再回傳reference詳細的情節可參考Java API (intern()回傳的是 "a canonical representation for the string object",關於canonical object,可參Oreilly的Java Performance Tuning 2nd,第4章)重點是兩個字串作比對時,可以直接從String pool裡作比對(canonicalized mapping),不需像equals()是一一比對char,且保證結果與equals()相同。上述的例子可改成:
     a.intern() == b.intern() 
以 intern()來比對字串,可以節省使用equals()時重覆產生新String物件的成本與一一作char比對的成本,但要考慮JVM記憶體大小的問題。
JVM將記憶體使用分為三大類(generation): (1)young:存放短暫存在的物件,像是loc al variable (2)tenured:需要存在更長一點時間的物件 (3) permanent generation:永續存在的,像是ClassLoader載入的classes,intern的String,string pool即在這區塊中維持。若是載入的Class過多,或是intern的字串過多,可能會造成Error,系統會抛出此Exception:java.lang.OutOfMemoryError: PermGen space failure,這時可能就要下參數調整JVM的記憶體大小了,例:-XX:MaxPermSize=100m’http://www.thesorensens.org/?p=14
因此使用intern()或是equals(),要看情形而定,像是大量重覆出現、固定的字串比對,就可以用intern()。像是SAX的實作中,也有用到intern()。預設值中,parser對於XML中的元素名稱、屬性名稱、namespace URI等,都使用intern()。string-interning 是standard SAX2 features 之一http://www.saxproject.org/apidoc/org/xml/sax/package-summary.html#package_description 

====================================================

CharAt取得指定字元(轉載)

CharAt(位置)可取出指定位置的字元,中文算法與英文相同
1
2
3
4
5
6
7
8
9
        String charStr = "This is my Web site! blog.yslifes.com";
        char c = charStr.charAt(3);
        System.out.println("英文第4位的字元是:"+c);
        //英文第4位的字元是:s
 
        charStr = "這是我的網站! blog.yslifes.com";
        c = charStr.charAt(5);
        System.out.println("中文第5位的字元是:"+c);
        //中文第5位的字元是:站


String.format字串格式化

String.format是一個靜態函數,可以直接使用,將字串依設定的位置或格式回傳出來。
如需顯示三位數的字串數字,前方補零,則可利用以下方法:
1
2
3
4
        String formatStr = "%03d";
        String formatAns = String.format(formatStr, 12);
        System.out.println("數字補零:"+formatAns);
        //數字補零:012

基本型態物件.parse基本型態  字串轉換成基本型態

利用基本型態物件的函數parse,可以把字轉換成基本型態,如果無法轉換時會有Exception產生
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        String Sint = "123";
        int myint = Integer.parseInt(Sint);
        System.out.println("字串轉換成數字:"+myint);
        //字串轉換成數字:123
 
        String SFloat = "123.1";
        float myfloat= Float.parseFloat(SFloat);
        System.out.println("字串轉換成浮點數:"+myfloat);
        //字串轉換成浮點數:123.1
 
        String SDouble = "123.2";
        double mydouble= Double.parseDouble(SDouble);
        System.out.println("字串轉換成雙浮點數:"+mydouble);
        //字串轉換成雙浮點數:123.2
 
        //其它型態以此類推...

Android/Java_將字串去掉科學記號


語法疑難置放區
msg.what = Clear HighLight;

.what http://answers.yahoo.com/question/index?qid=20110715193231AA0JcWu

Log.d(tag, "command:" + command);

instanceof

mType = (str[pos].trim().equalsIgnoreCase("STOP")) ? _CallType.Stop
                        : _CallType.Lady;


if(m_completed_num.indexOf(":=")!= -1)

沒有留言:

張貼留言