我有一个这样的字符串:99 365 25,633 gghddhdf 35
我需要数组中的所有数字。我的问题是如何处理25,633
因为','。我怎么能得到这个数字呢?我的代码是:
public string campDiff(string lineStr1, string lineStr2)
{
int size;
string sum = null;
double num1;
double num2;
double number;
string[] lineArr1 = lineStr1.Split(' '); ;
string[] lineArr2 = lineStr2.Split(' ');
if (lineArr1.Length > lineArr2.Length)
{
size = lineArr1.Length;
}
else
{
size = lineArr2.Length;
}
for (int i = 0; i < size; i++)
{
if (Double.TryParse(lineArr1[i], out num1))
{
if (Double.TryParse(lineArr2[i], out num2))
{
number = num2 - num1;
if (number > 0)
{
sum = Convert.ToString(number);
return sum;
}
}
}
}
return sum;
}
但它用逗号跳过了号码。
答案 0 :(得分:2)
有很多可能的解决方案。虽然,我认为最好的是将CultureInfo
设置为Invariant,然后用点替换所有逗号。例如:
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
string number = "3,2";
double d = double.Parse(number.Replace(",", "."));
Console.WriteLine(d);
在你的代码中会这样:
double[] numbers1 =
lineStr1.Replace(",", ".")
.Split(new char[0], StringSplitOptions.RemoveEmptyEntries)
.Select(s =>
{
double value;
bool success = double.TryParse(s, NumberStyles.Any, CultureInfo.InvariantCulture, out value);
return new { value, success };
})
.Where(p => p.success)
.Select(p => p.value)
.ToArray();
double[] numbers2 =
lineStr2.Replace(",", ".")
.Split(new char[0], StringSplitOptions.RemoveEmptyEntries)
.Select(s =>
{
double value;
bool success = double.TryParse(s, NumberStyles.Any, CultureInfo.InvariantCulture, out value);
return new { value, success };
})
.Where(p => p.success)
.Select(p => p.value)
.ToArray();
现在您有两个数组 numbers1和numbers2 ,其中所有可能的数字都来自两个字符串 lineStr1和lineStr2 。您决定如何处理它们,因为我无法完全理解您的方法的目的。
(感谢评论中的所有人让我编辑我的答案。)
答案 1 :(得分:1)
我假设您的字符串中只有 一个包含,
的字符串,然后您可以使用空格分割字符串,获取包含该字符的项目,然后将其解析为{ {1}}文化的double
与NumberDecimalSeparator
类似(,
)。
tr-TR
我使用var str = "99 365 25,633 gghddhdf 35";
var element = str.Split(' ').Where(s => s.Contains(',')).ToArray()[0];
double d = double.Parse(element, CultureInfo.GetCultureInfo("tr-TR"));
,因为这是我目前的文化。您可以Clone
tr-TR
CurrentCulture
将NumberDecimalSeparator
属性设置为,
,如果不是。
答案 2 :(得分:0)
在执行sub。
之前,只需检查当前lineArrX IsLetterpublic class IsLetterSample {
public static void Main() {
char ch = '8';
Console.WriteLine(Char.IsLetter(ch)); // False
Console.WriteLine(Char.IsLetter("sample string", 7)); // True
}
答案 3 :(得分:0)
你可以首先使用正则表达式
Regex.Replace(input, "[^0-9]+", string.Empty);