我有一个输入字符串。我需要用另一个字符串替换它的前缀(直到第一个点)。
方法签名: string MyPrefixReplace(字符串输入,字符串替换) 例子:
string res = MyPrefixReplace("12.345.6789", "000")
res = "000.345.6789";
res = MyPrefixReplace("908.345.6789", "1")
res = "1.345.6789";
有没有办法 不 在第一个点之前提取子字符串并进行替换**? 我 - 我不想要这个解决方案
int i = input.IndexOf(".");
string rep = input.Substring(0,i);
input.Replace(rep,replacer);
由于
答案 0 :(得分:3)
您可以使用String.Split
public string MyPrefixReplace(string source, string value, char delimiter = '.')
{
var parts = source.Split(delimiter);
parts[0] = value;
return String.Join(delimiter.ToString(), parts);
}
答案 1 :(得分:2)
使用String.IndexOf
和String.Substring
是最有效的方法。在您的方法中,您使用了Substring
的错误重载。 String.Replace
无论如何都是毫无意义的,因为您不想替换第一部分的所有出现但仅替换第一部分。
因此,您不必采取,而是跳过第一部分并为另一部分添加前缀。这可以按预期工作:
public static string MyPrefixReplace(string input, string replacer, char prefixChar = '.')
{
int index = input.IndexOf(prefixChar);
if (index == -1)
return input;
return replacer + input.Substring(index);
}
您的意见:
string result = MyPrefixReplace("908.345.6789", "1"); // 1.345.6789
result = MyPrefixReplace("12.345.6789", "000"); // 000.345.6789
答案 2 :(得分:1)
就我个人而言,我会将字符串拆分以解决这个问题,尽管显然还有其他方法可以做到这一点,这将是我的方法:
string Input = "123.456.789"
string[] SplitInput = Input.Split('.');
SplitInput[0] = "321";
string Output = String.Join('.', SplitInput);
输出应为“321.456.789”。