diff --git a/spring-core/src/main/java/org/springframework/util/ObjectUtils.java b/spring-core/src/main/java/org/springframework/util/ObjectUtils.java index 2511858a97..f7173025c8 100644 --- a/spring-core/src/main/java/org/springframework/util/ObjectUtils.java +++ b/spring-core/src/main/java/org/springframework/util/ObjectUtils.java @@ -21,6 +21,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Map; import java.util.Optional; +import java.util.StringJoiner; import org.springframework.lang.Nullable; @@ -709,18 +710,11 @@ public abstract class ObjectUtils { if (length == 0) { return EMPTY_ARRAY; } - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < length; i++) { - if (i == 0) { - sb.append(ARRAY_START); - } - else { - sb.append(ARRAY_ELEMENT_SEPARATOR); - } - sb.append(String.valueOf(array[i])); + StringJoiner sj = new StringJoiner(ARRAY_ELEMENT_SEPARATOR, ARRAY_START, ARRAY_END); + for (Object o : array) { + sj.add(String.valueOf(o)); } - sb.append(ARRAY_END); - return sb.toString(); + return sj.toString(); } /** diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/ast/InlineList.java b/spring-expression/src/main/java/org/springframework/expression/spel/ast/InlineList.java index 7197cf4dce..fbe9d80364 100644 --- a/spring-expression/src/main/java/org/springframework/expression/spel/ast/InlineList.java +++ b/spring-expression/src/main/java/org/springframework/expression/spel/ast/InlineList.java @@ -19,6 +19,7 @@ package org.springframework.expression.spel.ast; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.StringJoiner; import org.springframework.asm.MethodVisitor; import org.springframework.expression.EvaluationException; @@ -102,17 +103,13 @@ public class InlineList extends SpelNodeImpl { @Override public String toStringAST() { - StringBuilder sb = new StringBuilder("{"); + StringJoiner sj = new StringJoiner(",", "{", "}"); // String ast matches input string, not the 'toString()' of the resultant collection, which would use [] int count = getChildCount(); for (int c = 0; c < count; c++) { - if (c > 0) { - sb.append(","); - } - sb.append(getChild(c).toStringAST()); + sj.add(getChild(c).toStringAST()); } - sb.append("}"); - return sb.toString(); + return sj.toString(); } /** diff --git a/spring-web/src/main/java/org/springframework/http/HttpHeaders.java b/spring-web/src/main/java/org/springframework/http/HttpHeaders.java index 0e06390836..e22f4457a3 100644 --- a/spring-web/src/main/java/org/springframework/http/HttpHeaders.java +++ b/spring-web/src/main/java/org/springframework/http/HttpHeaders.java @@ -633,15 +633,11 @@ public class HttpHeaders implements MultiValueMap, Serializable * as specified by the {@code Accept-Charset} header. */ public void setAcceptCharset(List acceptableCharsets) { - StringBuilder builder = new StringBuilder(); - for (Iterator iterator = acceptableCharsets.iterator(); iterator.hasNext();) { - Charset charset = iterator.next(); - builder.append(charset.name().toLowerCase(Locale.ENGLISH)); - if (iterator.hasNext()) { - builder.append(", "); - } + StringJoiner joiner = new StringJoiner(", "); + for (Charset charset : acceptableCharsets) { + joiner.add(charset.name().toLowerCase(Locale.ENGLISH)); } - set(ACCEPT_CHARSET, builder.toString()); + set(ACCEPT_CHARSET, joiner.toString()); } /** diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/condition/AbstractRequestCondition.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/condition/AbstractRequestCondition.java index 657a4e7779..3d8365694e 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/condition/AbstractRequestCondition.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/condition/AbstractRequestCondition.java @@ -17,7 +17,7 @@ package org.springframework.web.reactive.result.condition; import java.util.Collection; -import java.util.Iterator; +import java.util.StringJoiner; import org.springframework.lang.Nullable; @@ -50,16 +50,12 @@ public abstract class AbstractRequestCondition iterator = getContent().iterator(); iterator.hasNext();) { - Object expression = iterator.next(); - builder.append(expression.toString()); - if (iterator.hasNext()) { - builder.append(getToStringInfix()); - } + String infix = getToStringInfix(); + StringJoiner joiner = new StringJoiner(infix, "[", "]"); + for (Object expression : getContent()) { + joiner.add(expression.toString()); } - builder.append("]"); - return builder.toString(); + return joiner.toString(); } /** diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/AbstractRequestCondition.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/AbstractRequestCondition.java index 50a99f04a1..5de3030a07 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/AbstractRequestCondition.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/AbstractRequestCondition.java @@ -17,7 +17,7 @@ package org.springframework.web.servlet.mvc.condition; import java.util.Collection; -import java.util.Iterator; +import java.util.StringJoiner; import org.springframework.lang.Nullable; @@ -74,16 +74,12 @@ public abstract class AbstractRequestCondition iterator = getContent().iterator(); iterator.hasNext();) { - Object expression = iterator.next(); - builder.append(expression.toString()); - if (iterator.hasNext()) { - builder.append(getToStringInfix()); - } + String infix = getToStringInfix(); + StringJoiner joiner = new StringJoiner(infix, "[", "]"); + for (Object expression : getContent()) { + joiner.add(expression.toString()); } - builder.append("]"); - return builder.toString(); + return joiner.toString(); } }