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(™,®)