如何去掉 stringBuilder 末尾的逗号和 space?

How to get rid of trailing comma and space in the end of the stringBuilder?

我在字符串中缺少逗号时添加了一个逗号,并希望从字符串末尾删除逗号,并在末尾的新行中添加 trim space。

StringBuilder mssg = new StringBuilder();

if (hasError().size <=8){
hasError().keySet().stream().forEach(id ->{
mssg.append(id.toString() + ":");
hasError().get(id).stream.limit(8).forEach(error ->mssg.append(error.toString() + ", "))
mssg.append("\n"); // adding new line for each Id to show it's own error mssg
)}


error output: Missing xnameMissing ynameMissing xyzMissing abcMissing ab, cd or ef,
Id: Id1

所以我的代码 - 我添加逗号分隔错误输出到字符串所以 mssg 的输出将是

mssg 输出:Id1:缺少 xname、缺少 yname、缺少 xyz、缺少 abc、缺少 ab、cd 或 ef,

1 个项目有多个缺失错误输出

Id1:Missing xname, Missing yname, Missing xyz, Missing abc, Missing ab, cd, or ef,
Id2:Missing yname, Missing ab, cd, or ef,
Id3:Missing xyz,
new line 

如果您只想从 StringBuilder 中删除最后 2 个字符:

sb.setLength(sb.length() - 2);

为了适应原始列表可能为空的情况:

sb.setLength(Math.max(0, sb.length() - 2));

但我认为更好的解决办法是一开始就不要把放错地方的分隔符放在那里;例如像这样构建字符串:

stream.limit(8).map(Object::toString).collect(Collectors.joining(", ")) 

我还是不明白为什么你不能这样做。

      StringBuilder mssg = new StringBuilder();
      Map<String, List<Integer>> hasError =
            Map.of("A", List.of(1, 2, 3, 4), "B", List.of(10, 20, 30, 4));

      if (hasError.size() <= 8) {

         hasError.keySet().stream().forEach(id ->
         {
            mssg.append(id + ":");

            mssg.append(
                  hasError.get(id).stream().limit(8).map(a -> a + "").collect(
                        Collectors.joining(", ")));

            mssg.append("\n");
         });
      }
      System.out.println(mssg);
   }

打印。

B:10, 20, 30, 4
A:1, 2, 3, 4