Tôi muốn mã Java để chuyển đổi một chuỗi các chuỗi thành một chuỗi.
array.toString()
? Hãy cụ thể hơn.
Tôi muốn mã Java để chuyển đổi một chuỗi các chuỗi thành một chuỗi.
array.toString()
? Hãy cụ thể hơn.
Câu trả lời:
Nếu bạn chỉ muốn một bãi chứa "kiểu gỡ lỗi" của một mảng:
String str = Arrays.toString(arr);
hoặc, để kiểm soát nhiều hơn (trước Java 8):
StringBuilder builder = new StringBuilder();
for(String s : arr) {
builder.append(s);
}
String str = builder.toString();
(Java 8 trở lên):
String str = String.join(",", arr);
Và nếu bạn đến từ góc độ Android:
String str = TextUtils.join(",", arr);
Bạn có thể sửa đổi ở trên tùy thuộc vào ký tự nào, nếu có, bạn muốn ở giữa các chuỗi.
Bạn có thể thấy mã gần giống với mã tiền Java 8 nhưng sử dụng StringBuffer
- StringBuilder
là một lớp mới hơn không an toàn cho luồng, nhưng do đó có hiệu suất tốt hơn trong một luồng vì nó không đồng bộ hóa không cần thiết. Nói tóm lại, bạn tốt hơn khi sử dụng StringBuilder
99% trường hợp - chức năng khôn ngoan, cả hai đều giống hệt nhau.
KHÔNG sử dụng một chuỗi và chỉ nối nó với + = giống như một số câu trả lời hiển thị ở đây. Điều này sẽ gửi GC qua mái nhà vì bạn đang tạo và ném đi nhiều đối tượng chuỗi như bạn có các mục trong mảng của mình. Đối với các mảng nhỏ, bạn có thể không thực sự nhận thấy sự khác biệt, nhưng đối với các mảng lớn, nó có thể là các đơn đặt hàng có cường độ chậm hơn.
Arrays.toString(yourArray);
nhưng tôi đoán Bạn đã sử dụngyourArray.toString();
Sử dụng chung Apache StringUtils.join()
. Nó nhận một mảng, như một tham số (và cũng có quá tải cho Iterable
và Iterator
tham số) và gọi toString()
từng phần tử (nếu nó không phải là null) để có được mỗi đại diện chuỗi phần tử. Mỗi đại diện chuỗi phần tử sau đó được nối thành một chuỗi với dấu phân cách ở giữa nếu một chuỗi được chỉ định:
String joinedString = StringUtils.join(new Object[]{"a", "b", 1}, "-");
System.out.println(joinedString);
Sản xuất:
a-b-1
Tôi thích sử dụng Google Guava Joiner cho việc này, ví dụ:
Joiner.on(", ").skipNulls().join("Harry", null, "Ron", "Hermione");
sẽ tạo ra Chuỗi giống như:
new String("Harry, Ron, Hermione");
ETA: Java 8 hiện có hỗ trợ tương tự:
String.join(", ", "Harry", "Ron", "Hermione");
Không thể thấy hỗ trợ bỏ qua các giá trị null, nhưng điều đó dễ dàng làm việc xung quanh.
null
sẽ là "anh ta không được nhắc đến tên" :-)
Joiner.on(", ").useForNull("Voldemort").join("Harry", null, "Ron", "Hermione");
String.join(", ", "Harry", null, "Ron", "Hermione").replaceAll("null", "Voldermart");
Bạn có thể làm điều này, đưa ra một loạt a
các kiểu nguyên thủy:
StringBuffer result = new StringBuffer();
for (int i = 0; i < a.length; i++) {
result.append( a[i] );
//result.append( optional separator );
}
String mynewstring = result.toString();
Hãy thử phương pháp Arrays.deepToString .
Trả về một chuỗi đại diện cho "nội dung sâu" của mảng được chỉ định. Nếu mảng chứa các mảng khác dưới dạng các phần tử, biểu diễn chuỗi chứa nội dung của chúng, v.v. Phương pháp này được thiết kế để chuyển đổi các mảng nhiều chiều thành chuỗi
Hãy thử các phương thức quá tải Arrays.toString .
Hoặc nếu không, hãy thử thực hiện chung dưới đây:
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();
}
lớp công khai ArrayToString {
public static void main (String [] args) { Chuỗi [] 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
Nếu bạn không có sự lựa chọn nhưng để sử dụng Java 6 hoặc 7 thì bạn nên sử dụng phép chia & chinh phục.
Bạn muốn mã tạo chuỗi từ ArrayList,
Iterate through all elements in list and add it to your String result
bạn có thể làm điều này theo 2 cách: sử dụng String as result hoặc StringBuffer / StringBuilder.
Thí dụ:
String result = "";
for (String s : list) {
result += s;
}
... nhưng đây không phải là thực hành tốt vì lý do hiệu suất. Tốt hơn là sử dụng StringBuffer (chủ đề an toàn) hoặc StringBuilder phù hợp hơn để thêm Chuỗi
Sử dụng phương thức nối của thư viện StringUtils của Apache Commons .
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);
Nếu bạn biết mảng có bao nhiêu phần tử, một cách đơn giản là làm điều này:
String appendedString = "" + array[0] + "" + array[1] + "" + array[2] + "" + array[3];