diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugOptionsManager.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugOptionsManager.java
index d1fe3b7..75e5e4d 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugOptionsManager.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugOptionsManager.java
@@ -485,14 +485,7 @@
 		if (list == null) {
 			return ""; //$NON-NLS-1$
 		}
-		StringBuilder buffer = new StringBuilder();
-		for (int i = 0; i < list.length; i++) {
-			if (i > 0) {
-				buffer.append(',');
-			}
-			buffer.append(list[i]);
-		}
-		return buffer.toString();
+		return String.join(String.valueOf(','), list);
 	}
 
 	/**
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/VMDetailsDialog.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/VMDetailsDialog.java
index cbde802..3b5d3d8 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/VMDetailsDialog.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/VMDetailsDialog.java
@@ -86,14 +86,7 @@
 		} else {
 			String[] args = fVM.getVMArguments();
 			if (args != null) {
-				StringBuilder buf = new StringBuilder();
-				for (int i = 0; i < args.length; i++) {
-					buf.append(args[i]);
-					if (i < (args.length - 1)) {
-						buf.append(" "); //$NON-NLS-1$
-					}
-				}
-				text = buf.toString();
+				text = String.join(" ", args); //$NON-NLS-1$
 			}
 		}
 		if (text == null) {
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/RemoteEvaluatorBuilder.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/RemoteEvaluatorBuilder.java
index e6a77df..9c81676 100644
--- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/RemoteEvaluatorBuilder.java
+++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/RemoteEvaluatorBuilder.java
@@ -157,14 +157,7 @@
 	}
 
 	private static String makeClassName(String[] names) {
-		StringBuilder sb = new StringBuilder();
-		for (int j = 0; j < names.length; j++) {
-			if (j > 0) {
-				sb.append('/');
-			}
-			sb.append(names[j]);
-		}
-		return sb.toString();
+		return String.join(String.valueOf('/'), names);
 	}
 
 	public List<String> getVariableTypeNames() {
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMRunner.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMRunner.java
index fea720b..0f89647 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMRunner.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMRunner.java
@@ -535,14 +535,7 @@
 		if (cmdDetails.getEnvp() != null) {
 			String[] envp = cmdDetails.getEnvp();
 			Arrays.sort(envp);
-			StringBuilder buff = new StringBuilder();
-			for (int i = 0; i < envp.length; i++) {
-				buff.append(envp[i]);
-				if(i < envp.length-1) {
-					buff.append('\n');
-				}
-			}
-			process.setAttribute(DebugPlugin.ATTR_ENVIRONMENT, buff.toString());
+			process.setAttribute(DebugPlugin.ATTR_ENVIRONMENT, String.join(String.valueOf('\n'), envp));
 		}
 		if (!cmdDetails.getClasspathShortener().getProcessTempFiles().isEmpty()
 				|| !cmdDetails.getCommandLineShortener().getProcessTempFiles().isEmpty()) {
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaRuntime.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaRuntime.java
index 1e67439..29d4e21 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaRuntime.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaRuntime.java
@@ -3124,14 +3124,7 @@
 	 * @since 3.1
 	 */
 	public static IClasspathAttribute newLibraryPathsAttribute(String[] paths) {
-		StringBuilder value = new StringBuilder();
-		for (int i = 0; i < paths.length; i++) {
-			value.append(paths[i]);
-			if (i < (paths.length - 1)) {
-				value.append("|"); //$NON-NLS-1$
-			}
-		}
-		return JavaCore.newClasspathAttribute(CLASSPATH_ATTR_LIBRARY_PATH_ENTRY, value.toString());
+		return JavaCore.newClasspathAttribute(CLASSPATH_ATTR_LIBRARY_PATH_ENTRY, String.join("|", paths)); //$NON-NLS-1$
 	}
 
 	/**
