2017-02-24 52 views
0

我試圖將單個字母的數組列表(例如{「a」,「b」,「c」})轉換爲一個字符串從所有這些字母組合 - 爲了 - 做一個單詞。因此,對於上面的例子,數組將會是{「a」,「b」,「c」},而這個詞將會是「abc」。我目前使用下面的代碼:將數組轉換爲不帶括號,逗號或空格的字符串

ArrayList<String> arr = new ArrayList<String>(); 
String str = "a"; //this is just to define it before hand with a random value 
*after a lot more code* 
str = Arrays.toString(arr.toArray()).replace("[", "").replace("]", "").replace(",", ""); 
System.out.println(str); 

這工作 - 我得到我的結果,沒有括號或逗號,但因爲我取代了逗號和括號與空間,我得到「A B C」,而不是「ABC」。有沒有辦法改變這個,所以我可以用純粹的東西來代替逗號而不是空格?我想一個更好的方法來說明這一點,將完全刪除的逗號和括號

非常感謝您的幫助。

+1

添加行初始化stringOne和stringTwo將幫助。 – JLewkovich

+1

那麼你是以「單個字母數組」開始還是以單個String StringOne開始?文字說了一件事,代碼說另一件事。 – weston

+0

對不起@JLewkovich我剛纔澄清了它。我的意思是說數組列表,而不是字符串。你可以看到上面的編輯。希望這可以幫助。 –

回答

3

你可以使用一個StreamCollectors.joining()

String[] arr = { "a", "b", "c" }; 
System.out.println(Stream.of(arr).collect(Collectors.joining())); 

其輸出(如需要)

abc 
+0

感謝您的迴應!當我實現它時,它給了我一個錯誤,說「Collectors.joining()」沒有被定義。所以我補充說: 'import java.util.stream; import java.lang.Object; 在我的代碼開始處導入java.util.stream.Collectors;' ,然後它給了我一個錯誤,指出找不到「class stream」。你有什麼建議嗎? –

+1

您使用的是什麼版本的Java? Streams API需要Java 8. – Matt

+0

@matt我不確定。如何檢查?但是,我使用BlueJ來編寫和編譯我的代碼。 –

2
String[] sa = new String[] {"a", "b", "c"}; 
System.out.println(String.join("", sa)); 

的流API在JDK1.8定義

+0

這與流API有什麼關係?你的意思是說'String.join'是可用的,因爲1.8 – weston

+0

.join()函數是否僅在javascript中可用? –

+0

@AndrewChu字符串.join()在JDK1.8中引入 –

3

假設你正在尋找從輸入字符串中去除任何不是的東西字母字符,你可以使用這個:

StringBuilder sb = new StringBuilder(); 

    for (int i = 0; i < input.length(); i++) { 
     if (Character.isAlphabetic(input.charAt(i))) { 
      sb.append(input.charAt(i)); 
     } 
    } 

    return sb.toString(); 
1

當你撥打:

System.out.println(stringOne); 

究竟發生什麼事是System.out.println隱式調用數組的toString()方法來獲得它的字符串表示:

System.out.println(stringOne.toString()); 

執行Array.toString()返回數組元素(或者說,toString()表示)數組元素),逗號分隔。

如果你想要一個不同的表示,你有兩個選擇。您可以創建一個擴展基本數組類的新數組類,並覆蓋toString()方法以返回所需的字符串表示形式。這可能不是你想要做的,但它是一個選項。

或者,您可以自己處理數組並構造所需的字符串表示形式。 @Elliott Frisch展示了一種使用Java 8中可用的Streams API執行此操作的好方法。

有很多其他方法可以實現相同結果。這裏是一個快速和髒for循環實現:

StringBuilder arrayAsString = new StringBuilder(); 
String delimiter = ""; 
for(String element : arr) { 
    arrayAsString.append(delimiter).append(element); 
    delimiter = ","; // I hate this idiom but it's handy for joining strings when you don't have a better .join() method available. 
} 

System.out.println(arrayAsString.toString()); // calling toString() explicitly for clarity, but it's not necessary 
相關問題