ฉันต้องการรหัส Java สำหรับการแปลงอาร์เรย์ของสตริงเป็นสตริง
array.toString()
? เฉพาะเจาะจงมากขึ้น.
ฉันต้องการรหัส Java สำหรับการแปลงอาร์เรย์ของสตริงเป็นสตริง
array.toString()
? เฉพาะเจาะจงมากขึ้น.
คำตอบ:
หากคุณต้องการดัมพ์แบบ "debug-style" ของอาร์เรย์:
String str = Arrays.toString(arr);
หรือเพื่อการควบคุมเพิ่มเติม (ก่อนหน้า Java 8):
StringBuilder builder = new StringBuilder();
for(String s : arr) {
builder.append(s);
}
String str = builder.toString();
(Java 8 ขึ้นไป):
String str = String.join(",", arr);
และถ้าคุณมาจากมุม Android:
String str = TextUtils.join(",", arr);
คุณสามารถแก้ไขข้างต้นขึ้นอยู่กับอักขระที่คุณต้องการในระหว่างสตริง
คุณอาจเห็นโค้ดใกล้เคียงกับโค้ด pre-Java 8 แต่ใช้StringBuffer
- StringBuilder
เป็นคลาสที่ใหม่กว่าที่ไม่ปลอดภัยสำหรับเธรด แต่มีประสิทธิภาพที่ดีกว่าในเธรดเดี่ยว ในระยะสั้นคุณใช้ดีกว่าStringBuilder
ใน 99% ของกรณี - ฟังก์ชั่นที่ชาญฉลาดทั้งสองเหมือนกัน
ไม่ต้องใช้สตริงและเพียงต่อท้ายด้วย + = เหมือนคำตอบที่แสดงไว้ที่นี่ สิ่งนี้จะส่ง GC ผ่านหลังคาเพราะคุณกำลังสร้างและทิ้งวัตถุสตริงให้มากที่สุดเท่าที่คุณมีรายการในอาร์เรย์ สำหรับอาร์เรย์ขนาดเล็กคุณไม่อาจสังเกตเห็นความแตกต่างได้ แต่สำหรับขนาดใหญ่มันอาจเป็นลำดับที่ช้ากว่า
Arrays.toString(yourArray);
แต่ฉันเดาว่าคุณเคยใช้yourArray.toString();
ใช้ Apache StringUtils.join()
ทั่วไป มันต้องใช้อาร์เรย์เป็นพารามิเตอร์ (และยังมีเกินพิกัดIterable
และIterator
พารามิเตอร์) และเรียกร้องให้toString()
แต่ละองค์ประกอบ (ถ้ามันไม่เป็นโมฆะ) เพื่อให้ได้รับการเป็นตัวแทนสตริงแต่ละองค์ประกอบ การแทนค่าสตริงองค์ประกอบแต่ละรายการจะถูกรวมเข้าเป็นหนึ่งสตริงโดยมีตัวคั่นอยู่ระหว่างหากระบุไว้:
String joinedString = StringUtils.join(new Object[]{"a", "b", 1}, "-");
System.out.println(joinedString);
ผลิต:
a-b-1
ฉันชอบใช้Guava Joiner ของ Googleเช่น:
Joiner.on(", ").skipNulls().join("Harry", null, "Ron", "Hermione");
จะผลิตสตริงเดียวกันกับ:
new String("Harry, Ron, Hermione");
ETA: Java 8 มีการสนับสนุนที่คล้ายกันในขณะนี้:
String.join(", ", "Harry", "Ron", "Hermione");
ไม่เห็นการสนับสนุนสำหรับการข้ามค่า Null แต่สามารถแก้ไขได้อย่างง่ายดาย
null
จะเป็น "เขาที่มีชื่อไม่ต้องพูดถึง" :-)
Joiner.on(", ").useForNull("Voldemort").join("Harry", null, "Ron", "Hermione");
String.join(", ", "Harry", null, "Ron", "Hermione").replaceAll("null", "Voldermart");
คุณสามารถทำสิ่งนี้ได้รับอาร์เรย์a
ประเภทดั้งเดิม:
StringBuffer result = new StringBuffer();
for (int i = 0; i < a.length; i++) {
result.append( a[i] );
//result.append( optional separator );
}
String mynewstring = result.toString();
จาก Java 8 วิธีที่ง่ายที่สุดที่ฉันคิดคือ:
String[] array = { "cat", "mouse" };
String delimiter = "";
String result = String.join(delimiter, array);
วิธีนี้คุณสามารถเลือกตัวคั่นโดยพลการ
ลองใช้วิธีการArrays.deepToString
ส่งคืนการแทนค่าสตริงของ "เนื้อหาลึก" ของอาร์เรย์ที่ระบุ ถ้าอาร์เรย์มีอาร์เรย์อื่นเป็นองค์ประกอบการแทนค่าสตริงจะมีเนื้อหาและอื่น ๆ วิธีนี้ถูกออกแบบมาสำหรับการแปลงอาร์เรย์หลายมิติเป็นสตริง
ลองใช้วิธีการArrays.toStringมากเกินไป
หรือลองใช้การใช้งานทั่วไปด้านล่างนี้:
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();
}
ArrayToString คลาสสาธารณะ {
โมฆะคงที่สาธารณะหลัก (String [] args) { String [] strArray = new 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
หากคุณไม่มีตัวเลือก แต่ใช้ Java 6 หรือ 7 คุณควรใช้การเข้าร่วม Divide & Conquer
คุณต้องการโค้ดที่สร้างสตริงจาก arrayList
Iterate through all elements in list and add it to your String result
คุณสามารถทำได้สองวิธี: การใช้ String เป็นผลลัพธ์หรือ StringBuffer / StringBuilder
ตัวอย่าง:
String result = "";
for (String s : list) {
result += s;
}
... แต่นี่ไม่ใช่วิธีปฏิบัติที่ดีเนื่องจากเหตุผลด้านประสิทธิภาพ ดีกว่าใช้StringBuffer (เธรดที่ปลอดภัย) หรือStringBuilderซึ่งเหมาะสมกับการเพิ่ม Strings
ใช้วิธีการเข้าร่วมของห้องสมุด Apache Commons ' StringUtils
String[] stringArray = {"a","b","c"};
StringUtils.join(stringArray, ",");
String array[]={"one","two"};
String s="";
for(int i=0;i<array.length;i++)
{
s=s+array[i];
}
System.out.print(s);
หากคุณรู้ว่ามีองค์ประกอบเท่าใดอาร์เรย์วิธีง่ายๆในการทำเช่นนี้:
String appendedString = "" + array[0] + "" + array[1] + "" + array[2] + "" + array[3];