Visual studio C# 字符串 trim

Visual studio C# string trim

大家好

我一直在做一个项目,我偶然发现了一个问题;字符串不会 trim 正确。正如您在图片中看到的那样,我只想从字符串中获取数字。第一张图片来自程序的启动(trimming 工作正常),最后一张图片是我实际需要从中获取数字的地方。

https://imgur.com/a/mi5yo (不能post图片因为我没有10代表)

在代码中

HtmlElementCollection TD = b[i].GetElementsByTagName("td");
string FirstString = TD[1].InnerText; //which is "??(?131?|?26?)?? "
Console.WriteLine("2. FirstString: " + FirstString);
string[] SecondString = FirstString.Trim('?', ')', '(', ' ').Split('|');
Console.WriteLine("SecondString1 " + SecondString[0].Trim('?'));
Console.WriteLine("SecondString2 " + SecondString[1].Trim('?'));

下面是我在 visual studio

中收到的警告
CropFinder.exe (CLR v4.0.30319: CropFinder.exe): Loaded C:\Windows\assembly\GAC\Microsoft.mshtml.0.3300.0__b03f5f7f11d50a3a\Microsoft.mshtml.dll'. Module was built without symbols.

提前感谢您的帮助,埃里克

您可以使用正则表达式。

using System.Text.RegularExpressions   
int number;
String result =Regex.Replace(FirstString, @"[^\d]", "");
int.TryParse(result,number);

您从 HTML 收到的字符很可能实际上不是 ? 个字符,而是一些无法在控制台输出中正确显示的字符,因此显示 ?

要准确查看您实际收到的字符,以便您能够相应地修改代码,枚举它们并输出它们的代码:

foreach ( char character in FirstString )
{
    Console.WriteLine( (byte)character );
}

如果比较自定义字符串和 HTML 的输出,您会发现字符代码不同。然后你可以根据代码进行修剪:

FirstString.Trim( ( char )characterCode );

其中 characterCode 是输出的字符代码。

更好的解决方案

作为修剪的替代解决方案,您应该考虑从结果中提取数字:

static void Main(string[] args)
{
    string FirstString = "??(?131?|?26?)??";

    var parts = FirstString.Split('|');

    Console.WriteLine(ExtractNumber(parts[0]));
    Console.WriteLine(ExtractNumber(parts[1]));

    Console.ReadLine();
    Console.ReadLine();
}

private static int ExtractNumber(string text)
{
    var numberString = String.Join("", text.Where(Char.IsNumber));
    int result = 0;
    int.TryParse(numberString, out result);
    return result;
}

我正在使用 Where LINQ 扩展方法 select 仅输入中的数字字符。然后我使用 Join 将数组转回字符串(使用空字符串作为分隔符)。最后我正在做一个 int.TryParse 尝试将结果数字转换为 int.

如果您使用的是 C# 7,则可以进一步简化代码:

private static int ExtractNumber(string text)
{
   var numberString = String.Join("", text.Where(Char.IsNumber));
   int.TryParse(numberString, out var result);
   return result;
}

out 变量可以在 C# 7 中内联声明。