【发布时间】:2016-03-28 20:44:09
【问题描述】:
我在今天的一次采访中被问到以下问题,它要求我们编写一个小程序来检查两个文本源是否实际上可能相同。
我能够得到一个检查两个字符串是否相同长度的解决方案,否则,它不匹配。但是,我试图提出一个解决方案,首先创建一个“过滤”数组,即转换,例如 A2Le 到 A..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