2017-07-25 83 views
-3

假設我有以下代碼:.toString.split(「,」)中產生了多少個字符串。呼叫?

StringBuilder sb = new StringBuilder("521,214"); 
String[] result = sb.toString().split(","); 

我的問題是:toString().split(",")產生2串或3串? 我知道結果字符串數組將有2個字符串 - 但toString()調用也會生成一個字符串 - 這不會被返回?

基本上,我試圖限制爲性能目的創建的字符串數量,並想知道toString()調用是否會將創建的字符串總數設置爲3?

+0

您可以運行代碼並親自查看它... –

+0

這將不會編譯第一個 – soorapadman

+0

尋求優化一個字符串是不值得的潛在收益的微不足道的努力。 – AntonH

回答

6

將有由這兩條線在總創建了五個String對象:傳遞給StringBuilder的構造

  • "521,214"對象。此對象位於字符串的實體池中,
  • ","將字符串對象傳遞給split。此對象也位於字符串的實體池中,
  • toString生成的等效對象"521,214"對象。每次調用toString都會生成一個新的String對象。沒有優化來查看是否在相同的字符串對象之前被請求過。爲"521""214"
  • 兩個String對象由split方法

不言而喻,一個String[]陣列對象將被創建以保持"521""214"對象從split方法返回生產。

+2

這個問題對我來說有點模糊。 OP說*有多少個字符串在內部形成*。這個數字肯定會大於5,因爲split方法在內部使用'String'的'ArrayList'。源代碼是[here](http://hg.openjdk.java.net/jdk7u/jdk7u6/jdk/file/8c2c5d63a17e/src/share/classes/java/lang/String.java)更正我,如果我是錯誤。 –

1

確實的toString()。分裂( 「」)生成2串或3串

既不2也不3,分裂返回一個數組對象,該陣列已取得的字符串的是另一個故事...

如果你的問題是在該數組中有多少個字符串,那麼答案是:它取決於在你正在分裂的原始字符串中找到多少個tockens(「,」)......

1

它將創建一個包含2個字符串的String數組。

您可以通過打印出數組隨時測試:

StringBuilder sb = new StringBuilder("521,214"); 
String[] result = sb.toString().split(","); 
for(String s : result) 
    System.out.println(s); 

方法.split()刪除您通過拆分的字符串。

+0

但是在內部,創建的字符串總數是3是否正確? sb.toString()創建一個字符串,然後split返回一個2個字符串的數組? – LennieCodes

+2

是的,但這是一個小的「性能問題」。當然,這不是造成瓶頸的原因。此外,這是我認爲你可以分裂成2的字符串數量最少。 – Ryan