为二维数组编写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
相关产品推荐
相关产品推荐

