Java 在剥离字符串后查找原始索引

Java 在剥离字符串后查找原始索引,java,Java,我的函数如下所示: int getIndex(String noisyString) { String quietString = noisyString.replaceAll("[^a-z]", ""); int quietStringIndex = findIndexInQuietString(quietString); return originalIndexInNoisyString; // ??? } 在剥离所有非字母字符的字符串后,我在剥离的字符串中找到

我的函数如下所示:

int getIndex(String noisyString) {
    String quietString = noisyString.replaceAll("[^a-z]", "");

    int quietStringIndex = findIndexInQuietString(quietString);

    return originalIndexInNoisyString; // ???
}

在剥离所有非字母字符的字符串后,我在剥离的字符串中找到了一个任意选择的索引。如何将此索引转换回可用于非压缩字符串的索引?

听起来您正试图在过滤字符串中所选索引处获取相同字符的非过滤字符串中的索引

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;
}
(即,您有一个字符串s1=“abc123def”s1.replaceAll()=“abcdef”。您希望在筛选字符串的索引4处获取字符的原始索引。 过滤字符串中索引4处的字符为e。未过滤字符串中的索引值为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;
}
public静态int-getOriginalIndex(字符串s,int索引){
如果(索引>s.replaceAll(“[^a-z]”,“”)。长度(){
抛出新的IllegalArgumentException(“索引无效”);
}
整数计数器;
int validCharCounter=0;
对于(计数器=0;计数器如果(s.charAt(计数器)>=“a”和s.charAt(计数器)您需要一个数据结构来将原始位置映射到创建的位置。有几种可能的方法可以进行不同的权衡。在问这个问题之前,您首先尝试了什么?我花了一段时间考虑是否必须创建一个新的
String#replaceAll
,否则我看不到创建原始位置映射的方法所有创建的位置。我想知道是否存在更优雅的解决方案,或是常用的解决方案。如果您任意选择的索引是42,那么只需遍历原始字符串,直到找到第42个字符,这是一个字母字符。我不确定您问的是什么。您想在中同时找到该字符吗随机选择的索引的索引,还是要在嘈杂的字符串中找到相同字符的索引?