我有以下功能:
int getIndex(String noisyString) {
String quietString = noisyString.replaceAll("[^a-z]", "");
int quietStringIndex = findIndexInQuietString(quietString);
return originalIndexInNoisyString; // ???
}
在剥离所有非字母字符的字符串后,我在剥离的字符串中找到任意选择的索引。如何将此索引转换回可用于未提取字符串的索引?
答案 0 :(得分:0)
听起来你正试图在过滤后的字符串中所选索引处的同一字符的非过滤字符串中获取索引。
(即你有一个字符串s1 =“abc123def”s1.replaceAll()=“abcdef”。你想得到过滤后的字符串中索引4处字符的原始索引。 过滤后的String中索引4处的字符是e。未经过滤的String中的索引值为7.。
最简单的蛮力方法是使用计数器来查看字符串,跟踪你要处理的索引,同时有一个单独的计数器变量来跟踪已传递的字符数。对过滤后的字符串有效。
public static int getOriginalIndex(String s, int index){
if (index > s.replaceAll("[^a-z]", "").length()) {
throw new IllegalArgumentException("index is invalid");
}
int counter;
int validCharCounter = 0;
for (counter = 0; counter < s.length() && validCharCounter < index; counter++) {
if (s.charAt(counter) >= 'a' && s.charAt(counter) <= 'z')
validCharCounter++;
}
return counter;
}