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]赋值,否则将其置为空一样。。类似地,我如何处理whenString 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循环是必要的。