有人知道我将如何查找和替换字符串中的文本吗?基本上我有两个字符串:

string firstS = "/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDABQODxIPDRQSERIXFhQYHzMhHxwcHz8tLyUzSkFOTUlBSEZSXHZkUldvWEZIZoxob3p9hIWET2ORm4+AmnaBhH//2wBDARYXFx8bHzwhITx/VEhUf39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f3//";

string secondS = "abcdefg2wBDABQODxIPDRQSERIXFh/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/abcdefg";


我想搜索firstS以查看它是否包含secondS中的任何字符序列,然后将其替换。还需要用方括号中替换的字符数替换它:


  [已替换字符数]


例如,因为firstSsecondS都包含“ 2wBDABQODxIPDRQSERIXFh”和“ / f39 / f39 / f39 / f39 / f39 / f39 / f39 / f39 / f39 / f39 / f39 / f39 / f39 / f39 / f39 /”他们将需要更换。因此,firstS变为:

string firstS = "/9j/4AAQSkZJRgABAQEAYABgAAD/[22]QYHzMhHxwcHz8tLyUzSkFOTUlBSEZSXHZkUldvWEZIZoxob3p9hIWET2ORm4+AmnaBhH//2wBDARYXFx8bHzwhITx/VEhUf39[61]f3//";


希望有道理。我想我可以使用Regex做到这一点,但是我不喜欢它的效率低下。有人知道另一种更快的方法吗?

最佳答案

有人知道另一种更快的方法吗?


是的,这个问题实际上有一个专有名称。它称为Longest Common Substring,并且具有reasonably fast solution

这是an implementation on ideone。它查找并替换所有十个字符或更长的普通子字符串。

// This comes straight from Wikipedia article linked above:
private static string FindLcs(string s, string t) {
    var L = new int[s.Length, t.Length];
    var z = 0;
    var ret = new StringBuilder();
    for (var i = 0 ; i != s.Length ; i++) {
        for (var j = 0 ; j != t.Length ; j++) {
            if (s[i] == t[j]) {
                if (i == 0 || j == 0) {
                    L[i,j] = 1;
                } else {
                    L[i,j] = L[i-1,j-1] + 1;
                }
                if (L[i,j] > z) {
                    z = L[i,j];
                    ret = new StringBuilder();
                }
                if (L[i,j] == z) {
                    ret.Append(s.Substring( i-z+1, z));
                }
            } else {
                L[i,j]=0;
            }
        }
    }
    return ret.ToString();
}
// With the LCS in hand, building the answer is easy
public static string CutLcs(string s, string t) {
    for (;;) {
        var lcs = FindLcs(s, t);
        if (lcs.Length < 10) break;
        s = s.Replace(lcs, string.Format("[{0}]", lcs.Length));
    }
    return s;
}

关于c# - 使用C#查找和替换字符串中的文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12169496/

10-11 14:41