如何格式化字符串以将双数组转换为形式:[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 + "]";
}