Java使用Arrays.toString()转换字符数组出现奇怪字符序列如何解决
Java字符数组拼接为连续字符串的实现方案
你使用Arrays.toString()得到带方括号、分隔符的结果是正常的,该方法的设计目的是生成供调试查看的格式化数组字符串,而非拼接数组内容。针对你的需求有以下几种简便实现:
1 最优方案(适配你当前的char数组场景)
Java的String类原生支持char数组直接构造,性能最高、代码最简,直接替换你原有Arrays.toString(passHold)那行即可:
passFinal = new String(passHold);
2 通用数组拼接方案(适用于非char类型数组)
如果后续你需要拼接其他类型的数组(比如String数组、Integer数组),可以使用String.join方法,第一个参数传入空字符串作为分隔符即可:
// 示例:String数组拼接为连续字符串 String[] arr = {"0", "2", "f", "B", "d", "7", "A"}; String result = String.join("", arr);
3 流式处理方案(Java 8+,适用于需要中间转换的场景)
如果数组元素需要先做类型转换再拼接,可以用Stream API实现:
import java.util.Arrays; import java.util.stream.Collectors; // 示例:混合类型数组拼接为连续字符串 Object[] arr = {0, 2, 'f', 'B', 'd', 7, 'A'}; String result = Arrays.stream(arr) .map(String::valueOf) .collect(Collectors.joining(""));
修改后的完整代码
import java.util.Scanner; public class passwordGen { public static char Number(char[] array) { byte random = (byte)(Math.random() * 10); return array[random]; } public static char Char(char[] array) { byte random = (byte)(Math.random() * 26); return array[random]; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); final char[] numbers = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; final char[] alphabet = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; float selector; int length = scanner.nextInt(); char[] passHold = new char[length]; String passFinal; try { for (int i = 0; i < length; i++) { selector = (float)Math.random(); if (selector < 0.5) { passHold[i] = Number(numbers); } else { passHold[i] = Char(alphabet); } } // 仅修改这一行即可 passFinal = new String(passHold); System.out.println(passFinal); } catch (Exception e) { System.out.println("An error occurred."); } } }
内容的提问来源于stack exchange,提问作者REDACTED
相关产品推荐
相关产品推荐

