我想要Java代码将字符串数组转换为字符串。
答案 0 :(得分:408)
如果您只想要一个数组的“调试样式”转储:
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);
您可以根据字符串之间的字符(如果有)修改上述内容。
您可能会看到与Java 8之前的代码几乎完全相同的代码,但使用StringBuffer
- StringBuilder
是一个不是线程安全的新类,但因此它在单个线程中具有更好的性能消除了不必要的同步。简而言之,在99%的情况下,你最好使用StringBuilder
- 功能明智,两者是相同的。
不要使用字符串,只需附加+ =,就像这里显示的一些答案一样。这会将GC发送到屋顶,因为您正在创建并丢弃与阵列中的项目一样多的字符串对象。对于小型阵列,您可能没有真正注意到这种差异,但对于大型阵列,它可能会慢几个数量级。
答案 1 :(得分:101)
使用Apache commons StringUtils.join()
。它需要一个数组作为参数(并且还有Iterable
和Iterator
参数的重载)并在每个元素上调用toString()
(如果它不为null)以获取每个元素字符串表示。然后将每个元素字符串表示连接成一个字符串,如果指定了一个字符串,则在它们之间使用分隔符:
String joinedString = StringUtils.join(new Object[]{"a", "b", 1}, "-");
System.out.println(joinedString);
产地:
a-b-1
答案 2 :(得分:35)
我喜欢使用Google's Guava Joiner,例如:
Joiner.on(", ").skipNulls().join("Harry", null, "Ron", "Hermione");
将产生与:
相同的字符串new String("Harry, Ron, Hermione");
ETA:Java 8现在有类似的支持:
String.join(", ", "Harry", "Ron", "Hermione");
无法看到跳过空值的支持,但这很容易解决。
答案 3 :(得分:13)
你可以这样做,给定一个基本类型的数组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();
答案 4 :(得分:12)
从Java 8开始,我认为最简单的方法是:
String[] array = { "cat", "mouse" };
String delimiter = "";
String result = String.join(delimiter, array);
这样您就可以选择任意分隔符。
答案 5 :(得分:9)
尝试使用Arrays.deepToString方法。
返回指定的“深层内容”的字符串表示形式 阵列。如果数组包含其他数组作为元素,则为字符串 表示包含其内容等。这个方法是 设计用于将多维数组转换为字符串
答案 6 :(得分:7)
尝试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();
}
答案 7 :(得分:3)
public class ArrayToString {
public static void main(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); } }
答案 8 :(得分:1)
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 And; Conquer join。
答案 9 :(得分:0)
您需要从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更适合添加字符串
答案 10 :(得分:0)
String array[]={"one","two"};
String s="";
for(int i=0;i<array.length;i++)
{
s=s+array[i];
}
System.out.print(s);
答案 11 :(得分:0)
使用Apache Commons&#39; StringUtils library的加入方法。
<?php
namespace Tests;
use Psr\Http\Message\StreamInterface;
use Psr\Http\Message\ResponseInterface;
class Response implements ResponseInterface {
/**
*
* @param StreamInterface $body Message body.
*/
public function __construct(StreamInterface $body) {
$this->body = $body;
}
/**
* Gets the body of the message.
*
* @return StreamInterface Returns the body as a stream.
*/
public function getBody() {
return $this->body;
}
public function getHeader($name) {}
public function getHeaderLine($name) {}
public function getHeaders() {}
public function getProtocolVersion() {}
public function hasHeader($name) {}
public function withAddedHeader($name, $value) {}
public function withBody(StreamInterface $body) {}
public function withHeader($name, $value) {}
public function withProtocolVersion($version) {}
public function withoutHeader($name) {}
public function getReasonPhrase() {}
public function getStatusCode() {}
public function withStatus($code, $reasonPhrase = '') {}
}
答案 12 :(得分:0)
当我们使用流时,我们确实有更多的灵活性,比如
映射 --> 将任何数组对象转换为 toString
过滤器 --> 为空时删除
join --> 添加加入字符
//Deduplicate the comma character in the input string
String[] splits = input.split("\\s*,\\s*");
return Arrays.stream(splits).filter(StringUtils::isNotBlank).collect(Collectors.joining(", "));
答案 13 :(得分:-21)
如果你知道数组有多少元素,一个简单的方法是这样做:
String appendedString = "" + array[0] + "" + array[1] + "" + array[2] + "" + array[3];