【问题标题】:comparing the string value with indexof with whole string将字符串值与 indexof 与整个字符串进行比较
【发布时间】:2019-01-11 03:53:25
【问题描述】:

我有一个字符串,可以得到任何可能的值,如下所示(请注意,其中 2 个值可能与下面的 message1、message4 相同,但是,请记住它可以使用相同或不同的大小写,但我想忽略大小写并从我得到的列表中比较)。

string Message = "No need of validation";
string Message = "No need of validation for certain members only"
string Message = "Validation for this member - No need of validation"
string Message = "no need of validation";

Message.IndexOf("No need of validation", StringComparison.CurrentCultureIgnoreCase) >= 0)

现在我上面的代码会为 2、3 种场景返回真/假?

我只希望 1,4 为真,2,3 为假。请确认我。如果这不正确,请帮助我修改我的代码

【问题讨论】:

  • 您是在问您对 string.IndexOf 的工作方式是否正确,还是在问如何比较字符串以忽略大小写?

标签: c# string c#-4.0 comparison indexof


【解决方案1】:

如果我对结果的理解正确,您可以使用 Ye old string.Compare,它从 .Net 1.1 开始就存在

Compare(String, String, CultureInfo, CompareOptions)

使用指定的规则比较两个指定的 String 对象,并且 返回一个整数,指示它们在排序中的相对位置 顺序。

退货

Int32 一个 32 位有符号整数,表示词法关系 strA和strB之间,如下表所示

值条件

  • 在排序顺序中,strA 在 strB 之前小于零。
  • 零 strA 与 strB 在排序顺序中的位置相同。
  • 大于零的 strA 按照排序顺序跟随 strB。

示例

string Message1 = "No need of validation";
string Message2 = "No need of validation for certain members only";
string Message3 = "Validation for this member - No need of validation";
string Message4 = "no need of validation";
Console.WriteLine(string.Compare("No need of validation", Message1, StringComparison.InvariantCultureIgnoreCase));
Console.WriteLine(string.Compare("No need of validation", Message2, StringComparison.InvariantCultureIgnoreCase));
Console.WriteLine(string.Compare("No need of validation", Message3, StringComparison.InvariantCultureIgnoreCase));
Console.WriteLine(string.Compare("No need of validation", Message4, StringComparison.InvariantCultureIgnoreCase));

输出

0
-1
-1
0

【讨论】:

  • 谢谢。我在 .net 4.5 中工作,我需要在每种情况下将单词的顺序至少分开 1,以便我对不同场景进行不同的比较,并且只有特定的消息匹配才会执行条件
  • @Learner 您介意添加该信息以及您认为与您的问题相关的任何其他内容
【解决方案2】:

如果你按原样运行,所有 4 个都是真的。

        string Message = "No need of validation";
        Console.WriteLine("1 : {0}", Message.IndexOf("No need of validation", StringComparison.CurrentCultureIgnoreCase));
        Message = "No need of validation for certain members only";
        Console.WriteLine("2 : {0}", Message.IndexOf("No need of validation", StringComparison.CurrentCultureIgnoreCase));
        Message = "Validation for this member - No need of validation";
        Console.WriteLine("3 : {0}", Message.IndexOf("No need of validation", StringComparison.CurrentCultureIgnoreCase));
        Message = "no need of validation";
        Console.WriteLine("4 : {0}", Message.IndexOf("No need of validation", StringComparison.CurrentCultureIgnoreCase));

这是因为忽略大小写,“比较”字符串存在于您的每个消息字符串中的某个位置,因此索引将始终为 0 或更高。

如果你想比较字符串是否相等而不考虑大小写,那么你应该使用字符串比较来代替:

        Message = "No need of validation";
        Console.WriteLine("1 : {0}", string.Compare(Message,"No need of validation", true));
        Message = "No need of validation for certain members only";
        Console.WriteLine("2 : {0}", string.Compare(Message, "No need of validation", true));
        Message = "Validation for this member - No need of validation";
        Console.WriteLine("3 : {0}", string.Compare(Message, "No need of validation", true));
        Message = "no need of validation";
        Console.WriteLine("4 : {0}", string.Compare(Message, "No need of validation", true));

这会给你想要的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 2017-02-20
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多