C#string.Replace不起作用

基本上我们的问题是:我们不能替换这样的字符串:10003 *但我们可以替换这样的字符串:10003

我们想要替换看起来像这样的字符串的一部分:10003 *这是我们的代码:

string text = sr2.ReadToEnd(); sr2.Close(); while (loop != lstTxt.Items.Count) { string SelectedItem = lstTxt.SelectedItem.ToString() + "*"; text = text.Replace(SelectedItem, "tietze111"); if (lstTxt.SelectedIndex < lstTxt.Items.Count - 1) lstTxt.SelectedIndex++; loop++; } sw2.Write(text); 

但它不起作用。 当我们在要替换的部分中省略*时,它可以工作。 但我们也必须更换*。 你知道我们要改变什么吗?

当我们使用它时它起作用:

 string text = sr2.ReadToEnd(); sr2.Close(); while (loop != lstTxt.Items.Count) { string SelectedItem = lstTxt.SelectedItem.ToString(); // changed text = text.Replace(SelectedItem, "tietze111"); if (lstTxt.SelectedIndex < lstTxt.Items.Count - 1) lstTxt.SelectedIndex++; loop++; } sw2.Write(text); 

– 使用(var sr2 = new StreamReader(Application.StartupPath + @“\ website \ Dehler 22 ET.htm”,Encoding.Default)){

  using (var sw2 = new StreamWriter(tempFile, true, Encoding.Default)) 

我们正在使用它,因为该文件仍然是ASCII。 也许这就是问题所在。 我们如何解决这个问题?

修复以下行,

 string SelectedItem = lstTxt.SelectedItem.Value; 

你拿的是物品,而不是价值。

你有没有尝试过?

 "[\*]" 

要么

 @"[*]" 

String.Replace(String,String)方法对任何字符都不做任何特殊处理。 您尝试替换的ID中有一个字符与您要匹配的字符不同。 我会尝试将数据源中的astrisk复制到您的代码中,看看问题是否仍然存在。

您的问题*以其他类型编码。 星号U + 002A的Unicode值

你可以试试这个。 注意Char.MinValue在技术上是一个空值,因为你不能有一个空白的Char。

在你的情况下: lstTxt.SelectedItem.ToString() + '\u002A'.ToString();

如果这不起作用,请尝试删除(使用*的不同编码值)以确保您可以在字符串中实际找到它。

 SomeString.Replace('\u002A', Char.MinValue); 

要么

 SomeString.Replace('\u002A'.ToString(), String.Empty); 

我之前遇到过这样的问题,它最终会成为一种反复试验,直到你做对了。 类似的问题我去年夏天C#String.Replace没有找到/替换Symbol(™,®)