如何将输入字符添加至char数组?技术实现求助
解决Java中动态收集字符到char数组的问题
嘿,我来帮你搞定这个困扰!你遇到的问题其实是Java里普通数组的固定长度特性导致的——char数组一旦创建,长度就没法改变了,所以没法直接“逐个添加”元素。不过有几个很实用的方案可以解决这个问题,我给你详细说说:
方案1:用ArrayList动态存储(推荐,适合不确定输入数量的场景)
ArrayList是Java里的动态列表,它可以自动扩容,完美解决数组长度固定的问题。等你收集完所有字符后,再把它转成char数组就行。
示例代码:
import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class CharCollector { public static void main(String[] args) { List<Character> charList = new ArrayList<>(); Scanner scanner = new Scanner(System.in); System.out.println("请输入单词(输入quit结束):"); while (true) { String inputStr = scanner.nextLine(); // 设置终止条件,避免无限循环 if (inputStr.equalsIgnoreCase("quit")) { break; } // 避免空字符串导致的索引越界异常 if (!inputStr.isEmpty()) { char firstChar = inputStr.charAt(0); charList.add(firstChar); // 直接添加字符到列表 System.out.println("已添加字符:" + firstChar); } else { System.out.println("请输入有效的单词哦,不能为空!"); } } // 把ArrayList转换为char数组 char[] charArray = new char[charList.size()]; for (int i = 0; i < charList.size(); i++) { charArray[i] = charList.get(i); } // 验证结果 System.out.println("最终的char数组内容:"); for (char c : charArray) { System.out.print(c + " "); } scanner.close(); } }
方案2:提前确定长度,直接用char数组(适合已知输入数量的场景)
如果你提前知道要收集多少个字符,那可以先创建对应长度的char数组,然后通过索引逐个赋值:
示例代码:
import java.util.Scanner; public class FixedLengthCharCollector { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入要收集的字符数量:"); int totalCount = scanner.nextInt(); scanner.nextLine(); // 处理nextInt后遗留的换行符,避免后续nextLine读取空字符串 char[] charArray = new char[totalCount]; for (int i = 0; i < totalCount; i++) { System.out.println("请输入第" + (i + 1) + "个单词:"); String inputStr = scanner.nextLine(); if (!inputStr.isEmpty()) { charArray[i] = inputStr.charAt(0); } else { System.out.println("输入不能为空,请重新输入!"); i--; // 回退索引,重新获取当前位置的字符 } } // 验证结果 System.out.println("最终的char数组内容:"); for (char c : charArray) { System.out.print(c + " "); } scanner.close(); } }
方案3:用StringBuilder收集字符,最后转数组
StringBuilder本来是用来拼接字符串的,但也可以用来收集单个字符,最后通过toString().toCharArray()直接转成char数组,代码更简洁:
示例代码:
import java.util.Scanner; public class StringBuilderCharCollector { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); Scanner scanner = new Scanner(System.in); System.out.println("请输入单词(输入quit结束):"); while (true) { String inputStr = scanner.nextLine(); if (inputStr.equalsIgnoreCase("quit")) { break; } if (!inputStr.isEmpty()) { sb.append(inputStr.charAt(0)); // 添加首字符到StringBuilder System.out.println("已添加字符:" + inputStr.charAt(0)); } else { System.out.println("请输入有效的单词!"); } } // 直接转成char数组 char[] charArray = sb.toString().toCharArray(); // 验证结果 System.out.println("最终的char数组内容:"); for (char c : charArray) { System.out.print(c + " "); } scanner.close(); } }
总结一下:如果不确定要收集多少个字符,优先用ArrayList或者StringBuilder,它们的动态扩容特性会让你少很多麻烦;如果知道数量,直接用固定长度的char数组就好。
内容的提问来源于stack exchange,提问作者Merlin
相关产品推荐
相关产品推荐

