字符串问题。包含特殊字符

问题描述 投票:0回答:2

我有一个对象列表,这些对象有一个名为

Date
的属性,它实际上是一个
string
(不是我的错,我不能改变它)。

ObjectsList[0].Date
返回
"08/07/2014 07:55:00"
,但我不知道为什么,如果我这样做
.Contains("07/2014")
它返回
true
.Contains("8/07/2014")
返回
false
.

这是一个escaping问题吗?有没有办法在string.Contains

转义特殊字符

c# char
2个回答
3
投票

如果

Contains
没有返回
true
,则字符串中没有这样的子串。要找出破坏乐趣的invisible符号,让我们看看dump

using System.Linq;

...
string dump = string.Join(Environment.NewLine, ObjectsList[0].Date
  .Select(c => $"'{c}' (\\u{((int)c):x4})")); 
        
Console.Write(dump);

预期产出:

'0' (\u0030)
'8' (\u0038)
'/' (\u002f)
'0' (\u0030)
'7' (\u0037)
'/' (\u002f)
'2' (\u0032)
'0' (\u0030)
'1' (\u0031)
'4' (\u0034)
' ' (\u0020)
'0' (\u0030)
'7' (\u0037)
':' (\u003a)
'5' (\u0035)
'5' (\u0035)
':' (\u003a)
'0' (\u0030)
'0' (\u0030)

但是您将拥有一个不同的。要摆脱 不需要的 字符,您可以使用 Linq:

using System.Linq;

...
// Keep only digits '0'..'9', space ' ' and delimiters ':', '/'
string cleared = string.Concat(ObjectsList[0]
  .Date
  .Where(c => char.IsDigit(c) || " :/".Contains(c)));

0
投票

如果您想比较时间,请使用此代码

 foreach (var item in ObjectsList)
    {
        if (string.Equals(item.Date, DateTime.Now.ToString("dd/mm/yyyy")))
        {
            Console.WriteLine("true");
        }
        else
        {
            Console.WriteLine("false");
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.