我很困惑。我找不到任何地方的答案;(將數組中的元素連接到字符串
我有一個String數組:
String[] arr = ["1", "2", "3"];
然後我將它轉換爲字符串:
String str = Arrays.toString(arr);
System.out.println(str);
我期望能獲得串"123"
,但我得到的字符串"[1,2,3]"
代替。
我怎麼能做到這一點在Java中?我使用的Eclipse IDE
我很困惑。我找不到任何地方的答案;(將數組中的元素連接到字符串
我有一個String數組:
String[] arr = ["1", "2", "3"];
然後我將它轉換爲字符串:
String str = Arrays.toString(arr);
System.out.println(str);
我期望能獲得串"123"
,但我得到的字符串"[1,2,3]"
代替。
我怎麼能做到這一點在Java中?我使用的Eclipse IDE
Use StringBuilder instead of StringBuffer, because it is faster than StringBuffer。
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)
。
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
請不要連接字符串,使用StringBuilder/Buffer或任何適當的。 – 2013-11-15 12:00:02
我不相信13 ppl實際上與字符串連接一致?!我想加倍Radek - 使用StringBuilder代替 – Deian 2015-05-27 13:54:39
簡單答案:
Arrays.toString(arr);
Arrays.toString(arr)給出結果像[1,2,3]。他不需要這種格式 – 2013-05-17 11:41:07
你的ans幫助我很多。謝謝 – 2017-11-09 11:06:43
Arrays.toString被格式化輸出(添加的括號和引號)。你應該實現你自己的toString方法。
public String toString(String[] arr){
String result = "";
for(String s : arr)
result+=s;
return result;
}
雖然Stringbuilder更好。往上看。
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"};
謝謝,這是最好的情況!) – Leo 2013-02-19 13:04:10
如果你真的連接BIG字符串,那麼你不應該問i == iMax?在每次迭代中!只是總是添加一個分隔符,然後刪除循環後的最後一個! – Sauer 2013-05-06 15:33:20
@Sauer請注意,我沒有自己編寫第一個代碼示例,它是從Java API直接複製粘貼的。你的意思是一個非常大的**陣列**?字符串的大小對於'i == iMax'檢查無關緊要。還要注意,檢查'i == iMax'是一種*真正的*,**真正快速的操作(並且您需要檢查以任何一種方式確定for循環的結束,所以它可能就在那裏;注意for循環不**看起來像這樣:'for(int i = 0; i!= iMax; i ++)')。 – Dukeling 2013-05-06 15:41:05
對象類有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
看看generic method to print all elements in an array
但總之,Arrays.toString(ARR)是打印的內容只是一個簡單的方法一個重要的數組。
重要的是要注意''Arrays.toString(arr)'不會自己打印數組......它只提供要打印的字符串 – 2014-12-04 19:10:44
Guava具有連接符實用程序來解決這個問題:
例子:
String joinWithoutSeparator = Joiner.on("").join(1, 2, 3); // returns "123"
String joinWithSeparator = Joiner.on(",").join(1, 2, 3); // returns "1,2,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());
}
由於您不需要併發性,通常會建議使用'StringBuilder'通過'StringBuffer'。另外,循環的主體可能應該是'strb.append(String.valueOf(id))。append(delimiter);'以便完全避免'String'上的'+'。 – Patrick 2014-08-12 17:15:05
這裏是一個辦法做到這一點: 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
利用番石榴的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
使用Arrays.toString()函數。它使您的代碼簡潔易讀。它在內部使用字符串生成器,因此它也很有效。爲了擺脫額外的字符,你可以選擇使用String.replace()函數來消除它們,但是,可以肯定的是,它會再次降低可讀性。
String str = Arrays.toString(arr).replaceAll(", |\\[|\\]", "");
這與Tris Nefzger的答案類似,但沒有冗長的子串構造來擺脫方括號。
正則表達式的解釋:「|」指「,」和「[」和「]」中的任何一個。 「\\」告訴Java字符串,我們不是指一些特殊字符(如新行「\ n」或製表符「\ t」),而是一個真正的反斜槓「\」。 因此,不是「\\ [」,正則表達式解釋器讀取「\ [」,它告訴它我們的意思是一個文字方括號,並且不想將它用作正則表達式語言的一部分(例如,「[^ 3 ] *「表示任意數量的字符,但它們都不應該是」3「)。
注意,謝謝 – Leo 2015-08-17 12:29:52
這是轉換字符串數組,字符串而不[
或]
或,
String[] strArray = new String[]{"Java", "String", "Array", "To", "String", "Example"};
String str = Arrays.toString(strArray);
str = str.substring(1, str.length()-1).replaceAll(",", "");
對於那些誰在Android中開發,使用文本實用程序。
String items = TextUtils.join("", arr);
假設ARR是String[] arr= {"1","2","3"};
類型的輸出將是123
Arrays.toString()可用於字符串數組轉換爲字符串。可以使用Regex表達式或簡單地使用替換方法刪除多餘的字符。
Arrays.toString(strArray).replace(",", "").replace("[", "").replace("]", "");
的Java 8已經推出了新的字符串的方法加入 公共靜態字符串連接(CharSequence的分隔符,爲CharSequence ...元素)
String.join("", strArray);
就做java中僅有1線8路:
使用Java 8String.join("", arr);
String newString= Arrays.toString(oldString).replace("[","").replace("]","").replace(",","").trim();
實施例。
String[] arr = {"1", "2", "3"};
String join = String.join("", arr);
我希望幫助
您需要將'are'更改爲'arr'。 – MarredCheese 2017-10-25 22:25:13
爲什麼不循環和數組中concatinate每個元素? – ogzd 2013-02-19 12:52:45
@LGAP這看起來並不如此。 – 2013-02-19 12:53:32
我已經嘗試過了,但它不能以可能的方式工作 – Leo 2013-02-19 12:53:54