案例一:使用
charAt()
方法时索引超出范围- 场景描述:
- 假设你正在开发一个文本处理程序,需要检查用户输入的字符串中某个特定位置的字符是否为数字。程序从用户输入中获取一个字符串,然后尝试访问一个可能超出字符串长度的索引位置。
- 代码示例:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入一个字符串:"); String input = scanner.nextLine(); try { char character = input.charAt(10); if (Character.isDigit(character)) { System.out.println("指定位置的字符是数字"); } else { System.out.println("指定位置的字符不是数字"); } } catch (StringIndexOutOfBoundsException e) { System.out.println("索引超出字符串范围"); } } }
- 解释:
- 当用户输入的字符串长度小于10时,
input.charAt(10)
就会抛出StringIndexOutOfBoundsException
异常。因为charAt()
方法的索引必须在0
到string.length() - 1
之间。在这个案例中,通过try - catch
块捕获了异常,并在catch
块中输出了相应的错误提示信息。
- 当用户输入的字符串长度小于10时,
- 场景描述:
案例二:
substring()
方法参数错误导致异常- 场景描述:
- 你正在编写一个网页爬虫程序,需要从网页的HTML代码中提取特定的标签内容。在提取过程中,需要使用
substring()
方法来截取包含标签内容的部分字符串,但是由于计算标签的起始和结束位置有误,导致参数超出字符串范围。
- 你正在编写一个网页爬虫程序,需要从网页的HTML代码中提取特定的标签内容。在提取过程中,需要使用
- 代码示例:
public class Main { public static void main(String[] args) { String html = "<p>这是一段网页内容</p>"; try { String content = html.substring(0, 20); System.out.println(content); } catch (StringIndexOutOfBoundsException e) { System.out.println("substring参数错误"); } } }
- 解释:
- 在这个例子中,字符串
html
的长度明显小于20,所以html.substring(0, 20)
会抛出StringIndexOutOfBoundsException
异常。同样,通过try - catch
块来捕获异常并处理这种错误情况。
- 在这个例子中,字符串
- 场景描述:
案例三:在循环中错误地使用索引访问字符串
- 场景描述:
- 考虑一个加密程序,它需要对字符串中的每个字符进行某种加密操作,如简单的字符位移。在循环遍历字符串的过程中,循环条件设置错误,导致在最后一次迭代中访问了超出字符串范围的索引。
- 代码示例:
public class Main { public static void main(String[] args) { String originalText = "secret"; try { for (int i = 0; i <= originalText.length(); i++) { char encryptedChar = originalText.charAt(i); // 这里可以进行加密操作,如简单的位移 System.out.print(encryptedChar); } } catch (StringIndexOutOfBoundsException e) { System.out.println("循环中索引超出范围"); } } }
- 解释:
- 由于循环条件是
i <= originalText.length()
,当i
等于originalText.length()
时,originalText.charAt(i)
会抛出StringIndexOutOfBoundsException
异常。正确的循环条件应该是i < originalText.length()
,这样可以确保在字符串的有效索引范围内进行操作。
- 由于循环条件是
- 场景描述: