在Java中使用字符串拆分时更改数组大小
赋值:获取两个字符串,用逗号分隔。保存到hashmap 目标是:使用一个try-catch块来防止用户输入错误数量的字符串 问题是:如果只提供了一个字符串,register.put行将抛出“IndexOutOfBounds”,但如果我提供了3个以上的字符串,则数组的大小似乎在增加以处理额外的行项(根据IntelliJ IDEA中的调试器)。这是nextLine()的预期函数。拆分函数,还是我遗漏了一些明显的内容?我知道我可以使用另一个循环来纠正这一点,但我对“收集器”如何处理以下输入感到困惑: 你好,世界,今天不是很好吗在Java中使用字符串拆分时更改数组大小,java,arrays,split,hashmap,Java,Arrays,Split,Hashmap,赋值:获取两个字符串,用逗号分隔。保存到hashmap 目标是:使用一个try-catch块来防止用户输入错误数量的字符串 问题是:如果只提供了一个字符串,register.put行将抛出“IndexOutOfBounds”,但如果我提供了3个以上的字符串,则数组的大小似乎在增加以处理额外的行项(根据IntelliJ IDEA中的调试器)。这是nextLine()的预期函数。拆分函数,还是我遗漏了一些明显的内容?我知道我可以使用另一个循环来纠正这一点,但我对“收集器”如何处理以下输入感到困惑:
HashMap <String, String> register = new HashMap();
Scanner in = new Scanner(System.in);
String[] collector = new String[2];
try {
collector = in.nextLine().split(",");
register.put(collector[0], collector[1]);
}catch (IndexOutOfBoundsException e){
System.out.println("\nYou didn't use the correct format!");
System.out.println("Please use the format provided!");
}
HashMap register=newhashmap();
扫描仪输入=新扫描仪(系统输入);
字符串[]收集器=新字符串[2];
试一试{
收集器=in.nextLine().split(“,”);
register.put(收集器[0],收集器[1]);
}catch(IndexOutOfBoundsException e){
System.out.println(“\n您没有使用正确的格式!”);
System.out.println(“请使用提供的格式!”);
}
尝试处理错误的输入,而不是捕获异常
HashMap <String, String> register = new HashMap();
Scanner in = new Scanner(System.in);
String[] collector = in.nextLine().split(",");
// validate inputs here
if (collector.length == 2 ) {
register.put(collector[0], collector[1]);
} else {
System.out.println("\nYou didn't use the correct format!");
System.out.println("Please use the format provided!");
}
HashMap register=newhashmap();
扫描仪输入=新扫描仪(系统输入);
String[]collector=in.nextLine().split(“,”);
//在此处验证输入
if(collector.length==2){
register.put(收集器[0],收集器[1]);
}否则{
System.out.println(“\n您没有使用正确的格式!”);
System.out.println(“请使用提供的格式!”);
}
如果您愿意只使用try-catch,那么您可以使用自定义异常来处理输入
如果是这样的话,你可以试试看
public class Test1 {
public static void main(String[] args) {
HashMap<String, String> register = new HashMap();
Scanner in = new Scanner(System.in);
String[] collector;
try {
collector = in.nextLine().split(",");
if (collector.length > 2) {
throw new Test1().new MaxLimitCrossed();
} else if (collector.length < 2) {
throw new Test1().new MinLimitCrossed();
}
register.put(collector[0], collector[1]);
System.out.println(register.toString());
} catch (MinLimitCrossed e) {
System.out.println(e.getMessage());
} catch (MaxLimitCrossed e) {
System.out.println(e.getMessage());
}
}
class MaxLimitCrossed extends Exception {
public MaxLimitCrossed() {
super("Max Limit Crossed.");
}
}
class MinLimitCrossed extends Exception {
public MinLimitCrossed() {
super("Min Limit Crossed.");
}
}
}
公共类Test1{
公共静态void main(字符串[]args){
HashMap寄存器=新HashMap();
扫描仪输入=新扫描仪(系统输入);
字符串[]收集器;
试一试{
收集器=in.nextLine().split(“,”);
如果(收集器长度>2){
抛出新的Test1();
}否则如果(收集器长度<2){
抛出新的Test1();
}
register.put(收集器[0],收集器[1]);
System.out.println(register.toString());
}渔获物(Mine){
System.out.println(e.getMessage());
}捕获(最大值){
System.out.println(e.getMessage());
}
}
类MaxLimitException{
公共MaxLimit(){
超级(“超过最大限制”);
}
}
类MinLimitException扩展异常{
公营机构{
超级(“越过最小限制”);
}
}
}
作为参考,您可以根据需要更改自定义异常。只是尝试展示如何做到这一点。阵列对象的大小没有改变。而是在调用.nextLine().split(“,”)中的
collector=in时,为收集器变量分配了一个新数组代码>。上一个2项空数组被丢弃和浪费。split()方法返回字符串[]。因此,最初大小为2的收集器[]数组将被重新分配split方法返回的字符串[]。出现异常的原因可能是发生异常时您正在读取的行与您认为的不同。调试它——找出到底是哪一行。