JAVA 连接双数组 => 字符串(特殊格式)



如何格式化字符串以将双数组转换为形式:[0.0, 2.4, 5.5, 6.3]

我将双数组元素分配给一个字符串,以获得上面格式的字符串表示。

我将双数组更改为单字符串表示的代码:

public String toString() {
String toString="[";
for(int i=0; i<data.length; i++) {
toString = toString + data[i] + ", ";
}
return toString + "]";
}

我得到的数组格式为[0.0,2.4,5.5,6.3,],这是意料之中的,也是错误的。

如何将其格式化为[0.0,2.4,5.5,6.3]?

我已经尝试过使用Arrays.toString()方法,但是,我不允许在这个项目中使用它。

我应该如何更改代码以获得所需的格式?

您可以流式传输data阵列,让Collectors.joining来完成繁重的任务:

@Override
public String toString() {
return Arrays.stream(data)
.mapToObj(Double::toString).collect(Collectors.joining(", ", "[", "]"));
}

编辑:
如果您不能流式传输数组,您可以自己迭代它,并对第一个元素进行特殊处理,这是唯一一个前面没有逗号的元素:

@Override
public String toString() {
StringBuilder sb = new StringBuilder("[");
if (data.length > 0) {
sb.append(data[0]);
}
for (int i = 1; i < data.length; ++i) {
sb.append(", ").append(data[i]);
}
sb.append("]");
return sb.toString();
}

只需检查数组的长度,如果它大于1,则将其与toString连接,然后从索引1开始遍历并返回。

public String toString() {
String toString="[";
//check length of an array
if(data.length >= 1){
toString += data[0];
}
//start from 1st index
for(int i=1; i<data.length; i++) {
toString += ", " + data[i];
}
return toString + "]";
}

您可以在数组的最后一个元素之前停止循环,然后手动将最后一个元件添加到结果中的字符串中。像这样:

if (data.length == 0) {
return "[]";
}
int lastElementIndex = data.length - 1;
String result = "[";
for (int i = 0; i < lastElementIndex; i++) {
result += data[i] + ", "; 
// or result += String.format("%.1f, ", data[i]); if you are allowed
}
return result + data[lastElementIndex] + "]"; 
// or String.format("%s%.1f]", result, data[lastElementIndex]);

为什么不检查您是否在最后一个元素上,而不添加,,然后:

public String toString2(double[] data) {
String toString = "[";
for (int i = 0; i < data.length; i++) {
if (i == data.length - 1) {
toString = toString + data[i];
} else {
toString = toString + data[i] + ", ";
}
}
return toString + "]";
}

只需添加一个if块来检查最后一个元素:

public String toString() {
String toString = "[";
for (int i = 0; i < data.length; i++) {
toString = toString + data[i];
if (i != data.length - 1) {
toString = toString + ", ";
}
}
return toString + "]";
}

或者在除第一个之外的元素之前添加分隔符

public String toString() {
String separator = "";
String toString = "[";
for (int i = 0; i < data.length; i++) {
toString = toString + separator;
toString = toString + data[i];
separator = ", ";
}
return toString + "]";
}

最新更新