char類型只能表示單個字符,而由多個字符鏈接而成的稱爲字符串。一般Java中使用java.long.String來建立字符串對象java
構建字符串對象編程
String str; //默認爲null public String(char arr[])//建立數組 char a[]={'g','o','o','d'}; String s=new String(a);//=>等同於 String s=new String("good") String s="good";
------------------------------------------數組
字符串特性:app
1.字符串最大特色:一旦被初始化就不能夠改變ide
能夠修改地址值的指引,可是內容是不會改變的ui
String s="abc"; s="kk";加密
s的地址指引改變了,內容是不變的spa
---------orm
2.String類複寫了Object類的equals方法對象
Object.equals()是比較地址值是否相同
String.equals()複寫後,比較內容是否相同
String s1="abc"; String s2=new String("abc"); String s3="abc"; System.out.println(s1==s2); System.out.println(s1.equals(s2)); System.out.println(s1==s3);
3. s1和s2有什麼區別
s1在內存中有一個對象
s2在內存中含有兩個對象
4.s1和s3的地址值是相同的,s1和s2是不一樣的
由於首先String會開闢一個Sting常量池,而後若是有相同的值時,會指引同一個地址值
若是new Stirng("abc"),那麼會新建一個Stirng的對象,放入abc,地址就不用了
-------------------------------------------------
StringBuilder是一個可動態變量,能夠 自適應大小自調節佔用的內存數,適用於須要頻繁附加字符的時候使用。
StringBuilder builder=new StringBuilder(x); x爲String類型
append()方法,在原有字符後邊添加字符
insert(int offset,arg)方法,指定下標,添加內容
delete(int start,int end) 方法。指定指標位置刪除,若是不存在位置,那麼會從最頭或者最尾。
reverse()反轉字符串
-----------
public static void main(String[] args){ String str=""; long startTime=System.currentTimeMillis(); for (int i=0;i<10000;i++){ str=str+i; } long endTime=System.currentTimeMillis(); long midTime=endTime-startTime; System.out.println(midTime+"ms"); StringBuilder builder=new StringBuilder(""); startTime=System.currentTimeMillis(); for (int i=0;i<10000;i++){ builder.append(i); } endTime=System.currentTimeMillis(); midTime=endTime-startTime; System.out.println(midTime+"ms"); }
以上是用String和StringBuilder的擴展時間
發現,StringBuilder擴展空間時速度更快,並且不會佔用多餘的塊,而String須要重複新建空間,鏈接舊的空間,耗時時間更長
------------------
如下是用數組和轉型的實例:
1.數組通常是比較固定的,不要修改數組的元素,須要修改的話,能夠新建Stirng變量進行存儲數組值
2.轉型
string-->char[]
char[i]-->string
char[i]-->int
int-->char[i]
/**編程實現對鍵盤輸入的英文名句子進行加密。用加密方法爲:當內容爲英文字母時,用26字母中的其後三個字母代替該字母,若爲其它字符時不變。
*好比245a95n加密後是245bcd95opq。
*/
public static void main(String[] args) { String str="245a95y"; String tmp1=""; char[] cha1=str.toCharArray(); System.out.println(str); //System.out.println((int)'a'+"\t"+(int)'z'); for (int i=0;i<cha1.length;i++){ int tmp=(int)cha1[i]; if (97<= tmp && tmp<=119){ tmp1+=(char)(tmp+1); tmp1+=(char)(tmp+2); tmp1+=(char)(tmp+3); }else if (tmp>119 && tmp<=122){ tmp1+=(char)(tmp-32); tmp1+=(char)(tmp-32-1); tmp1+=(char)(tmp-32-2); }else{ tmp1+=cha1[i]; } } System.out.println(tmp1); }
-----------------------------------------
-------------------------------------------------------
String.format(Local local,String format,Object...args)
Date dae =new Date();
String day=String.format("%te",date);
常見的日期時間轉換符。(太多寫下基本的,其他的查閱吧)
$tY年
%tm
%tD
%tH
%tM
$tS
常見組合
%tF2014-01-01
%tD01/01/14
%tc週二 一月 1 00:00:00 CST 2014
%tr00:00:00 下午
%tT00:00:00
%tR00:00
常見日期格式化轉換符
轉換符 說 明 示 例
%te 一個月中的某一天(1~31) 2
%tb 指定語言環境的月份簡稱 Feb(英文)、二月(中文)
%tB 指定語言環境的月份全稱 February(英文)、二月(中文)
%tA 指定語言環境的星期幾全稱 Monday(英文)、星期一(中文)
%ta 指定語言環境的星期幾簡稱 Mon(英文)、星期一(中文)
%tc 包括所有日期和時間信息 星期四 十一月 26 10:26:30 CST 2009
%tY 4位年份 2009
%tj 一年中的第幾天(001~366) 085
%tm 月份 03
%td 一個月中的第幾天(01~31) 08
%ty 2位年份 09
時間格式化轉換符
轉換符 說 明 示 例
%tH 2位數字的24小時制的小時(00~23) 14
%tI 2位數字的12小時制的小時(01~12) 05
%tk 2位數字的24小時制的小時(1~23) 5
%tl 2位數字的12小時制的小時(1~12) 10
%tM 2位數字的分鐘(00~59) 05
%tS 2位數字的秒數(00~60) 12
%tL 3位數字的毫秒數(000~999) 920
%tN 9位數字的微秒數(000000000~999999999) 062000000000
%tp 指定語言環境下上午或下午標記 下午(中文)、pm(英文)
%tz 相對於GMT RFC 82格式的數字時區偏移量 +0800
%tZ 時區縮寫形式的字符串 CST
%ts 1970-01-01 00:00:00至如今通過的秒數 1206426646
%tQ 1970-01-01 00:00:00至如今通過的毫秒數 1206426737453
常見的日期時間組合轉換符
轉換符 說 明 示 例
%tF 「年-月-日」格式(4位年份) 2009-01-26
%tD 「月/日/年」格式(2位年份) 03/25/09
%tr 「時:分:秒 PM(AM)」格式(12小時制) 03:22:06 下午
%tT 「時:分:秒」格式(24小時制) 15:23:50
%tR 「時:分」格式(24小時制) 15:23
----------------------------