Visual Basic 2013字符串替换

时间:2014-06-04 15:06:05

标签: vb.net visual-studio

我发现这段代码替换了文本文件中的字符串。但是,我试图让它替换文本文件中的几个字符串。

    My.Computer.FileSystem.WriteAllText("C:\windows\PrinterList2.txt", My.Computer.FileSystem.ReadAllText("C:\windows\PrinterList.txt").Replace("IT", "ADM-IT"), False)

例如,我需要它来代替" IT"与" ADM-IT"和" AR"使用" ADM-AR"可能还有一百多个。

如何让它循环来完成所有操作?一遍又一遍地运行这行代码只会用最后一项替换文件。

提前致谢。

3 个答案:

答案 0 :(得分:0)

Replace会返回String,因此您最终可以根据需要添加更多Replace次来电。

答案 1 :(得分:0)

查看MSDN中的Legacy String.Replace(...)签名,您似乎可以指定要替换的子字符串的出现次数。

您还需要记住的是,替换(..)函数将返回string,您可以继续替换它,直到完成为止。

如果你需要将所有“X”替换为“Y”,那么在下面的for loop中添加另一个循环来调用Replace(x, y),直到当前替换的字符串与前一个匹配(这可能是天真的而且效率不高。)

这是一些伪代码(不像VB那样太多了:():

// Build a look-up-table of junk to replace
replace = [["IT","ADM-IT"], ["AR","ADM-AR"], [...]];
string s = ReadAllText("path/to/file");

string previouS = s;
for pair in replace:
    s = s.Replace(pair[0], pair[1]);
    while(previous != s)
    {
        previous = s;
        s = s.Replace(pair[0], pair[1]);
    };

// Write file back to disk
WriteAllText("path/to/file", s);

答案 2 :(得分:0)

如果您只需要替换两个字符串,那么您可以使用以下内容:

Imports System.IO

File.WriteAllText("C:\windows\PrinterList2.txt",
File.ReadAllText("C:\windows\PrinterList.txt").
    Replace("IT", "ADM-IT").
    Replace("AR", "ADM_AR"), False)

如果不仅仅是少数,这将不会非常有效。这种方法的另一个问题是 IT和AR的每一次出现都将被替换,即使它们碰巧正在使用另一个词。例如,单词“STAR”将变为“STADM_AR”,因此请考虑这是否会成为您的问题。