gpt4 book ai didi

带有子字符串的 Java 数组 - 字符串索引超出范围异常

转载 作者:行者123 更新时间:2023-12-02 12:25:21 27 4
gpt4 key购买 nike

如何处理字符串索引超出范围的异常?我接受了采访并被问了如下问题。

我有以下程序:

        String currentUserFirstName = "raj";
String currentUserLastName = "ar";


String strFoo[] = new String[]{
(currentUserLastName.substring(0, 3)+"."+currentUserFirstName),
(currentUserFirstName+"."+currentUserLastName.substring(0, 1))
};


for(int i=0; i<strFoo.length; i++){
System.out.println(strFoo[i]);
}

我得到以下输出:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 3
at java.lang.String.substring(Unknown Source)

我想得到以下输出:

Exception
raj.a

如果值的长度不足以作为子字符串,我想在循环内处理异常。

我们将不胜感激!

已编辑我尝试使用以下内容:

for(int i=0; i<strFoo.length; i++){
try{
System.out.println(strFoo[i]);
}catch(Exception e){System.out.println("Exception");}
}

但是这不起作用!

最佳答案

在使用String.substring()方法之前,您需要考虑几个条件,以免在代码运行时遇到异常。首先当然是任一字符串变量是否包含 NullNull String ("");其次是变量中包含的字符串长度,其中 .substring() 方法将对其起作用,它是否具有足够的索引级别(长度)来满足您要检索的字符数?

现在知道了可能导致代码和/或输出错误的不同条件,您需要决定在发生这些特定情况时要执行的操作。

举个例子,假设 currentUserLastName 实际上包含一个空字符串 ("")。您是否应该忽略该变量并且不对它使用 .substring() 方法,这样您最终会得到 raj. 或者您宁愿用可能是井号 (#) 之类的内容,这样您最终会得到类似“raj.###”的内容。也许最好只是通知用户需要姓氏而不是运行代码块。

这同样适用于包含字符串长度的变量,该长度不满足您要从其中包含的字符串中检索的字符数的索引要求。如果你想从姓氏中检索 3 个字符,但姓氏只包含 2 个字符,你想对第三个槽做什么?忽略它并仅使用可用的两个字符:raj.ar 或填充它并用井号 (#) 或简单的空格填充第三个槽:raj.ar #。您不能很好地要求用户更改其姓氏,使其至少包含 3 个字符。

下面的示例代码演示了如何处理上述故障情况。当然,自然地假设变量 currentUserFirstNamecurrentUserLastName 自然会通过硬编码以外的其他方式获取字符串,但为了这个例子,我们将简单地使用您提供的内容:

String currentUserFirstName = "raj";
String currentUserLastName = "ar";

// Make sure our variables contain data.
if (currentUserFirstName.isEmpty() || currentUserLastName.isEmpty()) {
// Display an error message to console if one does not.
System.err.println("ERROR! Both the First and Last name must contain something!\n"
+ "First Name: " + currentUserFirstName + "\n"
+ "Last Name : " + currentUserLastName);
}
else {
// Declare and initialize the strgFoo[] Array
String strFoo[] = new String[2];
// Does currentUserLastName contain at least 3 characters?
if(currentUserLastName.length() >= 3) {
// Yes it does...
strFoo[0] = currentUserLastName.substring(0, 3)+"."+currentUserFirstName;
}
else {
// No it doesn't so let's use the string length
// inside currentUserLastName to determine our
// required index for the .substring() method.
strFoo[0] = currentUserLastName.substring(0, currentUserLastName.length()) +
"." + currentUserFirstName;
}
// Fill in the second element for our Array
strFoo[1] = currentUserFirstName+"." + currentUserLastName.substring(0, 1);

// Iterate through the Array and
// display its contents to Console.
for(int i = 0; i < strFoo.length; i++){
System.out.println(strFoo[i]);
}
}

关于带有子字符串的 Java 数组 - 字符串索引超出范围异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45524380/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com