【问题标题】:Getting IndexOutOfBoundExceptions when trying to create a new string array out of strings that contain chars and integers [duplicate]尝试从包含字符和整数的字符串中创建新的字符串数组时获取 IndexOutOfBoundExceptions [重复]
【发布时间】:2016-03-28 20:44:09
【问题描述】:

我在今天的一次采访中被问到以下问题,它要求我们编写一个小程序来检查两个文本源是否实际上可能相同。

我能够得到一个检查两个字符串是否相同长度的解决方案,否则,它不匹配。但是,我试图提出一个解决方案,首先创建一个“过滤”数组,即转换,例如 A2LeA..Le,然后将其与 2pL1 进行比较,过滤时为 ..pL. .我在那里失败了。附上我的尝试:

    int SLength = 0;
    int TLength = 0;

    String[] SParts = S.split("[^\\d]+");
    String[] TParts = T.split("[^\\d]+");

    for(int i = 0; i < SParts.length; i++) {
        if(!SParts[i].equals("")){
            SLength += Integer.parseInt(SParts[i]);
        }
    }

    for(int i = 0; i < TParts.length; i++) {
        if(!TParts[i].equals("")){
            TLength += Integer.parseInt(TParts[i]);
        }
    }

    for(int i = 0; i < S.length(); i++) {
        if(!Character.isDigit(S.charAt(i))){
            SLength += 1;
        }
    }

    for(int i = 0; i < T.length(); i++) {
        if(!Character.isDigit(T.charAt(i))){
            TLength += 1;
        }
    }

    if(TLength != SLength) {
        return false;
    }

    // Convert String S from "A2Le" to "A..Le"
    char[] sArray = S.toCharArray();
    char[] sArrayFiltered = new char[SLength + 1];
    int sIndex = 0;
    for(int i = 0; i < sArray.length; i++) {
        if(Character.isDigit(sArray[i])) {
            sIndex += Character.getNumericValue(sArray[i]);
            System.out.println("Digit Index: " + sIndex + ", Char: " + sArray[i] + ", Index: " + i);
        } else {
            sArrayFiltered[i] = sArray[sIndex];
            sIndex++;
            System.out.println("Char Index: " + sIndex + ", Char: " + sArray[i] + ", Index: " + i);
        }
    }

我不断收到IndexOutOfBoundExceptions 这样的消息:

Char Index: 1, Char: A, Index: 0
Digit Index: 3, Char: 2, Index: 1
Char Index: 4, Char: L, Index: 2
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
    at ReverseString.solution(ReverseString.java:192)
    at ReverseString.main(ReverseString.java:210)

此示例使用A2Le 示例字符串。

我试图通过调试器单步执行我的代码,但这似乎对我没有帮助。

编辑:我知道 OutOfBoundException 的原因是什么 - 但不知道 为什么 它是在此问题的上下文中引起的。我不是在问为什么我有一个OutOfBound,而是在哪里

【问题讨论】:

  • @Tom 我知道错误的原因是什么,但我不知道如何在这个问题的上下文中解决它。

标签: java ocr indexoutofboundsexception string-comparison


【解决方案1】:

sArray 的长度为4,所以最后一个索引是3

在下一行,sIndex 的值为4index 不存在,因此异常。

sArrayFiltered[i] = sArray[sIndex];

我认为逻辑上的缺陷是以下几行

sIndex += Character.getNumericValue(sArray[i]);

为什么要将数值添加到sIndex

【讨论】:

  • 谢谢!让我调查一下。我将数值添加到sIndex,因为这是sArrayFiltered 的索引,它将代表我的字符串A??Le
  • 哇哦。你是完全正确的。那是有问题的线。解决方案应该是sArrayFiltered[sIndex] = sArray[i];。在面试的压力下,我把它弄混了。谢谢亚辛!
  • @theGreenCabbage 不客气!祝你好运:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
相关资源
最近更新 更多