You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为二维数组编写toString方法:解决行尾多余空格问题

解决二维数组toString每行末尾多余空格的问题

你编写的Matrix类在输出字符串时,每行末尾会多出一个空格,不符合预期格式。需求是将二维数组输出为每行元素用空格分隔、无行尾空格、每行换行的字符串,比如输入{1, 2, 3},{4, 5, 6},输出:

1 2 3
4 5 6

问题原因

当前toString()方法的问题在于,内部循环中给每个元素后面都拼接了空格,包括每行的最后一个元素,导致换行前多了一个空格。

解决方案

以下是几种可行的修改方式:

方案1:判断是否为最后一个元素再添加空格

修改内部循环逻辑,仅在当前元素不是该行最后一个时添加空格:

@Override
public String toString() {
    String arrString = "";
    for(int i = 0; i < data.length; i++) {
        for(int j = 0; j < data[i].length; j++) {
            arrString += data[i][j];
            // 仅非末尾元素后添加空格
            if(j != data[i].length - 1) {
                arrString += " ";
            }
        }
        arrString += "\n";
    }
    // 可选:移除最后一行多余的换行符
    if(arrString.endsWith("\n")) {
        arrString = arrString.substring(0, arrString.length() - 1);
    }
    return arrString;
}

方案2:使用StringJoiner(Java 8+推荐)

利用Java内置的StringJoiner工具类自动处理分隔符,无需手动判断:

@Override
public String toString() {
    StringBuilder sb = new StringBuilder();
    for(int[] row : data) {
        StringJoiner joiner = new StringJoiner(" ");
        for(int num : row) {
            joiner.add(String.valueOf(num));
        }
        sb.append(joiner.toString()).append("\n");
    }
    // 移除最后多余的换行符
    if(sb.length() > 0) {
        sb.setLength(sb.length() - 1);
    }
    return sb.toString();
}

方案3:使用Stream API(Java 8+)

用流式写法实现更简洁的逻辑:

import java.util.Arrays;
import java.util.stream.Collectors;

@Override
public String toString() {
    return Arrays.stream(data)
            .map(row -> Arrays.stream(row)
                    .mapToObj(String::valueOf)
                    .collect(Collectors.joining(" ")))
            .collect(Collectors.joining("\n"));
}

以上三种方案都能实现你的需求,输出符合格式要求的字符串,且避免了行尾多余空格的问题。

内容的提问来源于stack exchange,提问作者Preston Little

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:09:25