C# 如何用另一个字符串替换字符串

C# 如何用另一个字符串替换字符串,c#,.net,C#,.net,我想制作一个对输入字符、或不敏感的程序,以便在不考虑应使用哪个符号来分隔整数部分和小数部分的情况下进行一些计算 我能想象的唯一方法是识别输入字符串,检查是否有,并将其替换为,,因为我的cultureType只接受, 问题是我不知道该怎么做,有人能帮我吗 我猜(这不在你的问题中)你正在尝试解析一个十进制数,这个数字可能有一个十进制分隔符,没有千个分隔符,它可能是一个,,可能是一个,猜测它是哪一个的一种可能的启发式方法是检查这两个数字的最后一次出现 if(inputString.Any(x =>

我想制作一个对输入字符
不敏感的程序,以便在不考虑应使用哪个符号来分隔整数部分和小数部分的情况下进行一些计算

我能想象的唯一方法是识别输入字符串,检查是否有
,并将其替换为
,因为我的cultureType只接受

问题是我不知道该怎么做,有人能帮我吗

我猜(这不在你的问题中)你正在尝试解析一个十进制数,这个数字可能有一个十进制分隔符,没有千个分隔符,它可能是一个
,可能是一个
,猜测它是哪一个的一种可能的启发式方法是检查这两个数字的最后一次出现

if(inputString.Any(x => x == '.'))
{
    inputString = inputString.Replace('.', ',');
}
这可以通过

string input = "123.456.496,58"; //or 123,456,789.58
int lastComma = input.LastIndexOf(",");
int lastPeriod = input.LastIndexOf('.');

NumberFormatInfo format = new NumberFormatInfo();
if (lastComma > lastPeriod) {
  format.NumberDecimalSeparator = ',';
  format.NumberGroupSeparator = '.';
} else {
  format.NumberDecimalSeparator = '.';
  format.NumberGroupSeparator = ',';
}

double parsed = Double.Parse(intput, format);
如果十进制分隔符后面有一个组分隔符,则此操作失败,可以使用其他启发式方法来更改它(即,如果只有一个非数字字符,则该字符为十进制分隔符。如果有多个非数字特殊字符,且其中一个只出现一次,则为十进制分隔符)

最后,解析未知格式的字符串需要一些猜测


如果您不想解析数字,但正在做完全不同的事情,请忽略此答案,然后从其他答案中选择一个。

请提供您尝试过的代码。请访问StackOverflow。尽量避免在问题标题中使用标记名。如果数字同时包含、和,该怎么办。?该怎么办then@JLRishe我的猜测是检测字符的最后一次出现,然后将其用作十进制分隔符。这仅在代码接受作为字符串的输入时有效。为什么要使用if来检查输入字符串?直接调用Replace更快。@Steve Speed schmeed。更重要的是,直接调用Replace更简单、更容易阅读。我知道这一点,但OP似乎想先检查
dot
,然后再替换它。所以我也添加了一个检查,也许这是不必要的,但我仍然不认为这会造成明显的时间差异。哈!和我做的一样。只需将您的
lastIndexOf
s更改为
lastIndexOf
,一切正常。谢谢,已修复。在太多的资本化惯例中工作会让我感到困惑。是的.NET有这样的倾向:PPascalCase for.NET,camelCase for Scala,snake_case for JS->总是使用所有错误的惯例!
string input = "123.456.496,58"; //or 123,456,789.58
int lastComma = input.LastIndexOf(",");
int lastPeriod = input.LastIndexOf('.');

NumberFormatInfo format = new NumberFormatInfo();
if (lastComma > lastPeriod) {
  format.NumberDecimalSeparator = ',';
  format.NumberGroupSeparator = '.';
} else {
  format.NumberDecimalSeparator = '.';
  format.NumberGroupSeparator = ',';
}

double parsed = Double.Parse(intput, format);