Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串值为动态时处理ArrayIndexBoundsOfException_Java - Fatal编程技术网

Java 字符串值为动态时处理ArrayIndexBoundsOfException

Java 字符串值为动态时处理ArrayIndexBoundsOfException,java,Java,我有一个动态字符串值,需要将其拆分并分配给其他字段,如下面的示例代码所示 public class TestDataType { public static void main(String[] args) { String firstName; String lastName; String useCaseId; String partner; String s = "Annie-Marie-83B782"

我有一个动态字符串值,需要将其拆分并分配给其他字段,如下面的示例代码所示

public class TestDataType {
    public static void main(String[] args) {
        String firstName;
        String lastName;
        String useCaseId;
        String partner;
        String s = "Annie-Marie-83B782"; //dynamic string
        // String s = "Annie-Marie-83B782-Alex";
        // String s = "Annie--83B782-";
        final String[] tokens = s.split("-");
        firstName = tokens[0];
        lastName = tokens[1];
        useCaseId = tokens[2];
        partner = tokens[3];
        System.out.println("firstName " + firstName);
        System.out.println("lastName " + lastName);
        System.out.println("useCaseId " + useCaseId);
        System.out.println("partner " + partner);
    }
}
上述代码引发以下异常:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3

由于使用拆分时字符串中没有令牌[3](
String s=“Annie-Marie-83B782”
),因此引发了上述异常,我如何在程序中处理所有可能的情况,就像我有令牌[3]赋值,否则将其置为空一样。。类似地,我如何处理when
String s=“Annie--83B782-

这是使用switch语句的好时机。我建议您用谷歌搜索它们以了解更多信息,因为它们在这种情况下非常有用。下面是您的代码:

String firstName = "";
String lastName = "";
String useCaseId = "";
String partner = "";
String s = "Annie-Marie-83B782";
final String[] tokens = s.split("-");


switch (tokens.length) {
case 4:
    partner = tokens[3];
case 3:
    useCaseId = tokens[2];
case 2:
    lastName = tokens[1];           
case 1:
    firstName = tokens[0];
    break;
default:
    System.err.println("Invalid input");
    return;
}

System.out.println("firstName " + firstName);
System.out.println("lastName " + lastName);
System.out.println("useCaseId " + useCaseId);
System.out.println("partner " + partner);

“我如何处理[这个]?”使用检查数组大小的
if
语句,即
tokens.length
——如果您对
split()很好奇的话
方法,但不知道if语句和/或数组大小。@Andreas-我知道数组大小,我的目的是想知道在出现这种情况时解决问题的最佳方法。关于您处理案例的最后一个问题,如
String s=“Annie--83B782-
,这应该没问题,因为它仍然会分割并留下相应的索引空字符串(不是空的)。是否有可能为每个循环使用@Tacodude7729@user222不是用4个不同的局部变量。@user222我不认为在这里用for-each循环是好的。您需要跟踪所查看的索引,以便知道将值分配给哪个变量。正常的for循环可能很好,但甚至比for循环中需要switch语句来确定存储值的变量还要好。我的解决方案很好,因为它很容易扩展,我不认为for循环是必要的。