String與其他類型的轉換


  首先,對於String類有一點是毫無疑問的:對String對象的任何改變都不影響到原對象,相關的任何change操作都會生成新的對象。

一. String與StringBuilder、StringBuffer

1.1 三者之間的比較

1.1.1 添加字符串
string1 += string2;

  String類后面添加字符串,在以上例子中,相當於將原有的string1變量指向的對象內容取出與string2變量指向的對象作相加操作再存進另一個新的String對象當中,再讓string1變量指向新生成的對象。(其中string2也可以是一個字符串)。

StringBuilder str = new StringBuilder(string1);
StringBuffer str = new StringBuffer(string1);

  StringBuilder與StringBuffer類后面添加字符串,在以上例子中,並沒有創建新的對象,append操作是在原有對象的基礎上進行的,如果添加動作要執行多次的話,StringBuilder與StringBuffer在全部過程中只創建了一個對象,所占的資源要比String方式小得多。

1.1.2 性能及使用場景

  String、StringBuilder、StringBuffer三者的執行效率:  StringBuilder > StringBuffer > String

  當然這個是相對的,不一定在所有情況下都是這樣。比如String str = "hello"+ "world"的效率就比 StringBuilder st = new StringBuilder().append("hello").append("world")要高。(String類的str在編譯期間被JVM優化成了"helloworld")。

  因此,這三個類是各有利弊,應當根據不同的情況來進行選擇使用:

  1.   當字符串相加操作或者改動較少的情況下,建議使用 String str="hello"這種形式;
  2.   當字符串相加操作較多的情況下,建議使用StringBuilder;
  3.   如果采用了多線程,則使用StringBuffer。

1.2 String與StringBuilder、StringBuffer之間的轉換

1.2.1 String轉換成StringBuilder與StringBuffer

有兩種方法:

 1 //法一
 2 StringBuilder stringbuilder = New StringBuilder("abcd");
 3 StringBuilder stringbuilder = New StringBuilder(str1);
 4 
 5 StringBuffer stringbuffer = New StringBuffer("efgh");
 6 StringBuffer stringbuffer = New StringBuffer(str2);
 7 //法二
 8 StringBuilder stringbuilder = New StringBuilder();
 9 stringbuilder.append(str1);
10 
11 StringBuffer stringbuffer = New StringBuffer();
12 stringbuffer.append(str2)
1.2.2 StringBuilder與StringBuffer轉換成String
String str1 = stringbuffer.toString();
String str2 = stringbuilder.toString();

二. String與int

2.1 將字串String轉換成整數int

有兩個方法:

1 //法一
2 int i = Integer.parseInt([String]); 
3 int i = Integer.parseInt([String],[int radix]);
4 //法二
5 int i = Integer.valueOf(my_str).intValue();

2.2 將整數int轉換成字串String

有三種方法:

1 //法一
2 String s = String.valueOf(i);
3 //法二
4 String s = Integer.toString(i);
5 //法三
6 String s = "" + i;

三. String與字符數組(char[])

3.1 String轉換成字符數組(char[])

有兩種方法:

1 //法一
2 char[] strChar = str.toCharArray();
3 //法二
4 int[] strChar = new int[str.length()];
5 for(int i = 0;i < str.length(); i++){
6   strChar[i] = (int)str.charAt(i);
7 }

3.2 字符數組(char[])轉換成String

有兩種方法:

1 char data[] = {'h', 'e', 'l', 'l', 'o'};
2 //法一
3 String str1 = new String(data); 
4 //法二
5 String str2 = String.valueOf(data);

四. String與byte[]

4.1 String轉換成byte[]

1 byte[] midbytes=isoString.getBytes("UTF8");
2 //為UTF8編碼
3 byte[] isoret = srt2.getBytes("ISO-8859-1");
4 //為ISO-8859-1編碼,其中ISO-8859-1為單字節的編碼

4.2 byte[]轉換成String

1 String isoString = new String(bytes,"ISO-8859-1");
2 String srt2=new String(midbytes,"UTF-8");

五. String[]與List

5.1 String[]轉換成List

有以下三種方法,其實String[]可以是任意類型的數組。

 1 //法一
 2 String[] userid = {"aa","bb","cc"};
 3 List<String> userList = Arrays.asList(userid);
 4 //法二
 5 String[] userid = {"aa","bb","cc"};
 6 List<String> userList = new ArrayList<String>();
 7 Collections.addAll(userList, userid);
 8 //法三 最笨的方法
 9 String[] userid = {"aa","bb","cc"};
10 List<String> userList = new ArrayList<String>(userid.length);
11 for(String uid: userid){
12     userList.add(uid);
13 }

5.2 List轉換成String[]

有以下兩種方法,其實String[]可以是任意類型的數組

 1 //法一
 2 List<String> strList = new ArrayList<String>();
 3 strList.add("aa");
 4 strList.add("bb");
 5 Object[] objs = strList.toArray();
 6 //如果要變成String數組,需要強轉類型。
 7 String[] strs = (String[]) strList.toArray();
 8 //也可以指定大小:
 9 final int size = strList.size();
10 String[] strs = (String[])strList.toArray(new String[size]);
11 
12 //法二 笨方法
13 List<String> strList = new ArrayList<String>();
14 strList.add("aa");
15 strList.add("bb");
16 String[] strs = new String[strList.size()];
17 Iterator iter = strList.iterator();
18 int i = 0;
19 while(iter.hasNext()){
20     strs[i] = (String) iter.next();
21     i++;
22 }

六. String與Date

詳見:http://www.cnblogs.com/bmbm/archive/2011/12/06/2342264.html

 

參考:http://www.cnblogs.com/dolphin0520/p/3778589.html

http://zhangyuefeng1983.blog.163.com/blog/static/1083372520126693524870/

http://www.cnblogs.com/bmbm/archive/2011/12/06/2342264.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM