Dizeleri bir dizeye dönüştürmek için Java kodu istiyorum.
array.toString()
? Daha spesifik ol.
Dizeleri bir dizeye dönüştürmek için Java kodu istiyorum.
array.toString()
? Daha spesifik ol.
Yanıtlar:
Bir dizinin yalnızca "hata ayıklama stili" dökümünü istiyorsanız:
String str = Arrays.toString(arr);
veya daha fazla denetim için (Java 8'den önce):
StringBuilder builder = new StringBuilder();
for(String s : arr) {
builder.append(s);
}
String str = builder.toString();
(Java 8 ve üstü):
String str = String.join(",", arr);
Ve Android açısından geliyorsanız:
String str = TextUtils.join(",", arr);
Dizeler arasında hangi karakterlerin (varsa) olmasını istediğinize bağlı olarak yukarıdakileri değiştirebilirsiniz.
Java 8 öncesi koduyla neredeyse aynı kodu görebilirsiniz, ancak StringBuffer
- kullanımı StringBuilder
, iş parçacığı için güvenli olmayan daha yeni bir sınıftır, bu nedenle tek bir iş parçacığında daha iyi performansa sahiptir, çünkü gereksiz senkronizasyondan uzaklaşır. Kısacası, StringBuilder
vakaların% 99'unda kullanmanız daha iyi - işlevsellik açısından, ikisi de aynı.
Bir dize KULLANMAYIN ve bazı cevapların burada gösterildiği gibi + = ile eklemeyin. Bu, GC'yi çatıdan gönderir, çünkü dizinizde öğeleriniz olduğu kadar dize nesnesi oluşturup atarsınız. Küçük diziler için farkı gerçekten fark etmeyebilirsiniz, ancak büyük diziler için daha yavaş büyüklük düzenleri olabilir.
Arrays.toString(yourArray);
ama sanırım sen kullandınyourArray.toString();
Apache ortaklarını kullanın StringUtils.join()
. Bir diziyi parametre olarak alır (ve ayrıca aşırı yükleri Iterable
ve Iterator
parametreleri vardır) ve toString()
her öğenin dize gösterimini almak için her öğeyi (boş değilse ) çağırır . Daha sonra her öğe dize temsili, belirtilirse aralarında bir ayırıcı bulunan bir dizeye birleştirilir:
String joinedString = StringUtils.join(new Object[]{"a", "b", 1}, "-");
System.out.println(joinedString);
üretir:
a-b-1
Bunun için Google'ın Guava Joiner'ı kullanmayı seviyorum , örneğin:
Joiner.on(", ").skipNulls().join("Harry", null, "Ron", "Hermione");
aynı dizeyi üretecekti:
new String("Harry, Ron, Hermione");
ETA: Java 8'in şu anda benzer desteği var:
String.join(", ", "Harry", "Ron", "Hermione");
Boş değerleri atlamak için destek göremiyorum, ancak bu kolayca çözülebilir.
null
olsaydık, "adı belirtilmemesi gereken kişi" olurdu :-)
Joiner.on(", ").useForNull("Voldemort").join("Harry", null, "Ron", "Hermione");
String.join(", ", "Harry", null, "Ron", "Hermione").replaceAll("null", "Voldermart");
Bir dizi a
ilkel tip verildiğinde bunu yapabilirsiniz :
StringBuffer result = new StringBuffer();
for (int i = 0; i < a.length; i++) {
result.append( a[i] );
//result.append( optional separator );
}
String mynewstring = result.toString();
Arrays.deepToString yöntemini deneyin .
Belirtilen dizinin "derin içeriklerinin" dize ile temsil edilen halini döndürür. Dizi ögeler olarak başka diziler içeriyorsa, dize gösterimi içeriklerini içerir ve bu şekilde devam eder. Bu yöntem, çok boyutlu dizileri dizelere dönüştürmek için tasarlanmıştır
Arrays.toString aşırı yüklenmiş yöntemlerini deneyin .
Aksi takdirde, genel uygulamanın altında bunu deneyin:
public static void main(String... args) throws Exception {
String[] array = {"ABC", "XYZ", "PQR"};
System.out.println(new Test().join(array, ", "));
}
public <T> String join(T[] array, String cement) {
StringBuilder builder = new StringBuilder();
if(array == null || array.length == 0) {
return null;
}
for (T t : array) {
builder.append(t).append(cement);
}
builder.delete(builder.length() - cement.length(), builder.length());
return builder.toString();
}
genel sınıf ArrayToString {
public static void main (Dize [] argümanları) { String [] strArray = yeni String [] {"Java", "PHP", ".NET", "PERL", "C", "COBOL"};String newString = Arrays.toString(strArray); newString = newString.substring(1, newString.length()-1); System.out.println("New New String: " + newString); } }
String[] strings = new String[25000];
for (int i = 0; i < 25000; i++) strings[i] = '1234567';
String result;
result = "";
for (String s : strings) result += s;
//linear +: 5s
result = "";
for (String s : strings) result = result.concat(s);
//linear .concat: 2.5s
result = String.join("", strings);
//Java 8 .join: 3ms
Public String join(String delimiter, String[] s)
{
int ls = s.length;
switch (ls)
{
case 0: return "";
case 1: return s[0];
case 2: return s[0].concat(delimiter).concat(s[1]);
default:
int l1 = ls / 2;
String[] s1 = Arrays.copyOfRange(s, 0, l1);
String[] s2 = Arrays.copyOfRange(s, l1, ls);
return join(delimiter, s1).concat(delimiter).concat(join(delimiter, s2));
}
}
result = join("", strings);
// Divide&Conquer join: 7ms
Seçeneğiniz yoksa, Java 6 veya 7'yi kullanmak için Divide & Conquer birleştirmesini kullanmalısınız.
ArrayList öğesinden dize üreten kod istiyorsunuz,
Iterate through all elements in list and add it to your String result
bunu 2 şekilde yapabilirsiniz: sonuç olarak String veya StringBuffer / StringBuilder kullanma.
Misal:
String result = "";
for (String s : list) {
result += s;
}
... ama performans nedeni nedeniyle bu iyi bir uygulama değil. Dizeleri eklemek için daha uygun olan StringBuffer (iş parçacığı güvenli) veya StringBuilder kullanmak daha iyidir
Apache Commons ' StringUtils kütüphanesinin join yöntemini kullanın.
String[] stringArray = {"a","b","c"};
StringUtils.join(stringArray, ",");
Dizinin ne kadar öğeye sahip olduğunu biliyorsanız, bunu yapmanın basit bir yolu vardır:
String appendedString = "" + array[0] + "" + array[1] + "" + array[2] + "" + array[3];