2013-02-19 154 views
31

我很困惑。我找不到任何地方的答案;(將數組中的元素連接到字符串

我有一個String數組:

String[] arr = ["1", "2", "3"]; 

然後我將它轉換爲字符串:

String str = Arrays.toString(arr); 
System.out.println(str); 

我期望能獲得串"123",但我得到的字符串"[1,2,3]"代替。

我怎麼能做到這一點在Java中?我使用的Eclipse IDE

+1

爲什麼不循環和數組中concatinate每個元素? – ogzd 2013-02-19 12:52:45

+0

@LGAP這看起來並不如此。 – 2013-02-19 12:53:32

+0

我已經嘗試過了,但它不能以可能的方式工作 – Leo 2013-02-19 12:53:54

回答

52

Use StringBuilder instead of StringBuffer, because it is faster than StringBuffer

Sample code

String[] strArr = {"1", "2", "3"}; 
StringBuilder strBuilder = new StringBuilder(); 
for (int i = 0; i < strArr.length; i++) { 
    strBuilder.append(strArr[i]); 
} 
String newString = strBuilder.toString(); 

這也是爲什麼這是一個更好的解決方案,以使用字符串連接:當您連接兩個字符串,創建一個新的字符串對象,並進行逐字符複製字符。
有效地表示代碼複雜度將是您的數組大小的平方的順序!

1+2+3+ ... n這是每次迭代複製的字符數)。 StringBuilder會在這種情況下只執行一次「複製到一個字符串」,從而將複雜性降低到O(n)

+0

只提供代碼片段的答案不是很有幫助。請考慮添加一些評論或簡要解釋它的作用。 :) – bahrep 2013-02-19 13:15:01

+1

它仍然是最好的答案,因爲其他人使用字符串連接 – 2013-06-21 18:27:26

+11

使用StringBuilder,而不是StringBuffer。在這個例子中,StringBuffer是線程安全的並且不需要。 – walv 2014-06-18 15:02:29

16
Arrays.toString(arr); 

輸出結果爲[1,2,3],並將其存儲到字符串中。並打印出來以便輸出[1,2,3]。

如果你想獲得輸出123試試這個:

public static void main(String[] args) { 
    String[] arr= {"1","2","3"}; 
    String output =""; 
    for(String str: arr) 
     output=output+str; 
    System.out.println(output); 


} 

輸出:

123 
+12

請不要連接字符串,使用StringBuilder/Buffer或任何適當的。 – 2013-11-15 12:00:02

+2

我不相信13 ppl實際上與字符串連接一致?!我想加倍Radek - 使用StringBuilder代替 – Deian 2015-05-27 13:54:39

16

簡單答案:

Arrays.toString(arr);

+5

Arrays.toString(arr)給出結果像[1,2,3]。他不需要這種格式 – 2013-05-17 11:41:07

+0

你的ans幫助我很多。謝謝 – 2017-11-09 11:06:43

2

Arrays.toString被格式化輸出(添加的括號和引號)。你應該實現你自己的toString方法。

public String toString(String[] arr){ 
    String result = ""; 
    for(String s : arr) 
     result+=s; 
    return result; 
} 

雖然Stringbuilder更好。往上看。

6

Arrays.toString:(從API,至少對於Object[]版本的話)

public static String toString(Object[] a) { 
    if (a == null) 
     return "null"; 
    int iMax = a.length - 1; 
    if (iMax == -1) 
     return "[]"; 

    StringBuilder b = new StringBuilder(); 
    b.append('['); 
    for (int i = 0; ; i++) { 
     b.append(String.valueOf(a[i])); 
     if (i == iMax) 
      return b.append(']').toString(); 
     b.append(", "); 
    } 
} 

因此,這意味着它插入[在開始時,]底,和元素之間爲,

如果你想讓它沒有這些字符:(StringBuilder的比低於快,但它不能是代碼量小)

String str = ""; 
for (String i:arr) 
    str += i; 
System.out.println(str); 

旁註:

String[] arr[3]= [1,2,3]將不會編譯。

想必你想:String[] arr = {"1", "2", "3"};

+0

謝謝,這是最好的情況!) – Leo 2013-02-19 13:04:10

+0

如果你真的連接BIG字符串,那麼你不應該問i == iMax?在每次迭代中!只是總是添加一個分隔符,然後刪除循環後的最後一個! – Sauer 2013-05-06 15:33:20

+0

@Sauer請注意,我沒有自己編寫第一個代碼示例,它是從Java API直接複製粘貼的。你的意思是一個非常大的**陣列**?字符串的大小對於'i == iMax'檢查無關緊要。還要注意,檢查'i == iMax'是一種*真正的*,**真正快速的操作(並且您需要檢查以任何一種方式確定for循環的結束,所以它可能就在那裏;注意for循環不**看起來像這樣:'for(int i = 0; i!= iMax; i ++)')。 – Dukeling 2013-05-06 15:41:05

0

對象類有toString方法。所有其他擴展它的類都會覆蓋toString方法,因此對於數組,toString也會以這種方式被覆蓋。所以如果你想用你的方式輸出你需要創建你自己的方法,通過它你將得到你想要的結果。

str=""; 
for (Integer i:arr){ 
    str+=i.toString(); 
} 

希望這有助於

參考Why does the toString method in java not seem to work for an array

1

看看generic method to print all elements in an array

但總之,Arrays.toString(ARR)是打印的內容只是一個簡單的方法一個重要的數組。

+0

重要的是要注意''Arrays.toString(arr)'不會自己打印數組......它只提供要打印的字符串 – 2014-12-04 19:10:44

3

Guava具有連接符實用程序來解決這個問題:

例子:

String joinWithoutSeparator = Joiner.on("").join(1, 2, 3); // returns "123" 
String joinWithSeparator = Joiner.on(",").join(1, 2, 3); // returns "1,2,3" 
3

我剛纔寫了以下內容:

public static String toDelimitedString(int[] ids, String delimiter) 
{ 
    StringBuffer strb = new StringBuffer(); 
    for (int id : ids) 
    { 
     strb.append(String.valueOf(id) + delimiter); 
    } 
    return strb.substring(0, strb.length() - delimiter.length()); 
} 
+1

由於您不需要併發性,通常會建議使用'StringBuilder'通過'StringBuffer'。另外,循環的主體可能應該是'strb.append(String.valueOf(id))。append(delimiter);'以便完全避免'String'上的'+'。 – Patrick 2014-08-12 17:15:05

0

這裏是一個辦法做到這一點: Arrays.toString(陣列).substring(1,(3 * array.length-1)) 。全部替換(」, 」,」」);

這裏是一個演示類:

package arraytostring.demo; 

import java.util.Arrays; 

public class Array2String { 

     public static void main(String[] args) { 

       String[] array = { "1", "2", "3", "4", "5", "6", "7" }; 
       System.out.println(array2String(array)); 
       // output is: 1234567 
     } 

     public static String array2String(String[] array) { 

       return Arrays.toString(array).substring(1, (3 * array.length - 1)) 
           .replaceAll(", ", ""); 

     } 

} 

斯卡拉使這更容易,更清潔,更安全:

scala> val a = Array("1", "2", "3") 
a: Array[String] = Array(1, 2, 3) 

scala> val aString = a.mkString 
aString: String = 123 

scala> println(aString) 
123 
2

利用番石榴的Joiner(在R18內部使用StringBuilder

String[] arr= {"1","2","3"}; 
Joiner noSpaceJoiner = Joiner.on(""); 
noSpaceJoiner.join(arr)) 

Joiner很有用,因爲它是thread-s afe和不可變的,並且可以在許多地方重用,而不必重複代碼。在我看來,它也更具可讀性。


使用Java 8的Stream支持下,我們還可以降低下來到一個班輪。

String concat = Stream.of(arr).collect(Collectors.joining()); 

在這種情況下兩個輸出123

5

使用Arrays.toString()函數。它使您的代碼簡潔易讀。它在內部使用字符串生成器,因此它也很有效。爲了擺脫額外的字符,你可以選擇使用String.replace()函數來消除它們,但是,可以肯定的是,它會再次降低可讀性。

String str = Arrays.toString(arr).replaceAll(", |\\[|\\]", ""); 

這與Tris Nefzger的答案類似,但沒有冗長的子串構造來擺脫方括號。

正則表達式的解釋:「|」指「,」和「[」和「]」中的任何一個。 「\\」告訴Java字符串,我們不是指一些特殊字符(如新行「\ n」或製表符「\ t」),而是一個真正的反斜槓「\」。 因此,不是「\\ [」,正則表達式解釋器讀取「\ [」,它告訴它我們的意思是一個文字方括號,並且不想將它用作正則表達式語言的一部分(例如,「[^ 3 ] *「表示任意數量的字符,但它們都不應該是」3「)。

+0

注意,謝謝 – Leo 2015-08-17 12:29:52

2

這是轉換字符串數組,字符串而不[],

String[] strArray = new String[]{"Java", "String", "Array", "To", "String", "Example"}; 

String str = Arrays.toString(strArray); 
      str = str.substring(1, str.length()-1).replaceAll(",", ""); 
  • 首先轉換陣列串一點代碼。
  • 第二次從x到y的位置獲取文本。
  • 第三替換所有 '' 用 「」
0

對於那些誰在Android中開發,使用文本實用程序。

String items = TextUtils.join("", arr); 

假設ARR是String[] arr= {"1","2","3"};

類型的輸出將是123

0

Arrays.toString()可用於字符串數組轉換爲字符串。可以使用Regex表達式或簡單地使用替換方法刪除多餘的字符。

Arrays.toString(strArray).replace(",", "").replace("[", "").replace("]", ""); 

的Java 8已經推出了新的字符串的方法加入 公共靜態字符串連接(CharSequence的分隔符,爲CharSequence ...元素)

String.join("", strArray); 
3

就做java中僅有1線8路:

使用Java 8

String.join("", arr);

-1
String newString= Arrays.toString(oldString).replace("[","").replace("]","").replace(",","").trim(); 
0

實施例。

String[] arr = {"1", "2", "3"}; 
    String join = String.join("", arr); 

我希望幫助

+0

您需要將'are'更改爲'arr'。 – MarredCheese 2017-10-25 22:25:13

相關問題