【问题标题】:How to ignore Cases in C#如何在 C# 中忽略大小写
【发布时间】:2020-11-22 15:52:59
【问题描述】:

我在这里有这段代码,如果我的输入是大写或小写,我正在尝试独立搜索联系人中的姓名(例如,如果我输入“john”/”,则独立搜索联系人“John” John"/"jOhn"/etc) 但我不知道该怎么做。

using System;
namespace Exercise_8._5
{
    class Program
    {
        static void Main(string[] args)
        {
            string[,] sContacts = new string [5,2];
            string sSearch = "";
            int iRows = 5;
            int iSub = 0;

            ReadContacts(ref sContacts, iRows);
            Search(ref sSearch, iSub);

            Console.WriteLine();
            Console.WriteLine("Press any key to exit");
            Console.ReadLine();
        }
        static void Contacts(ref string[,] psContacts)
        {
            psContacts[0, 0] = "John";
            psContacts[0, 1] = "07621456900";
            psContacts[1, 0] = "Jasper";
            psContacts[1, 1] = "07843456377";
            psContacts[2, 0] = "Jane";
            psContacts[2, 1] = "07935254678";
            psContacts[3, 0] = "Jim";
            psContacts[3, 1] = "07945112623";
            psContacts[4, 0] = "Jackie";
            psContacts[4, 1] = "07431733507";
        }
        static void ReadContacts(ref string[,] psContacts, int piRows)
        {
            Contacts(ref psContacts);

            Console.WriteLine("My top 5 Contacts are: ");
            Console.WriteLine();

            for (piRows = 0; piRows < psContacts.GetLength(0); piRows++)
            {
                Console.Write(psContacts[piRows, 0] + " - ");
                Console.WriteLine(psContacts[piRows, 1]);
            }
        }
        static void Name(ref string psSearch)
        {
            Console.WriteLine();
            Console.WriteLine("Search: ");
            psSearch = Console.ReadLine();
        }
        static void Search(ref string psSearch, int piSub)
        {
            int piRows = 5;
            int piColoumns = 2;
            string[,] psContacts = new string[piRows, piColoumns];

            Contacts(ref psContacts);
            Name(ref psSearch);

            while (piSub < psContacts.GetLength(0) && psSearch != psContacts[piSub, 0])
            {
                String.Compare(psSearch, psContacts[piSub, 0], true);
                piSub++;
            }

            if (piSub != psContacts.GetLength(0))
            {
                for(piRows = 0; piRows < 5;  piRows++)
                {
                    if (psSearch == psContacts[piRows, 0])
                    {
                        Console.WriteLine();
                        Console.Write(psContacts[piRows, 0] + " - ");
                        Console.WriteLine(psContacts[piRows, 1]);
                    }
                }
            }

            else
            {
                for(piSub = 0; piSub < 1; piSub++)
                {
                    Console.WriteLine();
                    Console.WriteLine(psSearch + " doesn't exist");
                }
            }
        }
    }
}

【问题讨论】:

  • 你说你不知道怎么做,但是你有行 String.Compare(psSearch, psContacts[piSub, 0], true); 就是这样做的......(我没有阅读整个代码,但 that's what that overload 确实.
  • 这能回答你的问题吗? Caselessly comparing strings in C#
  • 有人告诉我这个 - String.Compare(psSearch, psContacts[piSub, 0], true); - 我决定尝试一下,但它什么也没做,我仍然无法以其他方式搜索。我不知道我是否将它放在一个不好的地方,或者我是否应该将它写在另一个函数中并读取所有联系人和用户的输入并进行比较。我尝试了在互联网上看到的其他不同方法,但没有一个有效。

标签: c# compare string-comparison


【解决方案1】:

你在找这个吗:

string val = "AStringValue";

if (val.Equals("astringvalue", StringComparison.InvariantCultureIgnoreCase))

Compare(String, String, Boolean)

顺便说一下,据我所知,您已在代码中实现了此方法。

【讨论】:

    【解决方案2】:

    我添加了这个与 Ales 相同的答案

    默认情况下,string.Equals 区分大小写

    string.Equals("A", "a")
    //false
    string.Equals("A", "a", StringComparison.OrdinalIgnoreCase)
    //true
    

    您可以使用StringComparison.CurrentCultureIgnoreCase 应用最终用户机器文化

    【讨论】:

      【解决方案3】:

      您当前使用的字符串比较不区分大小写(第三个参数是ignoreCase):

      String.Compare(psSearch, psContacts[piSub, 0], true)
      

      但是,您实际上并没有使用比较结果。 String.Compare(String, String, Boolean) 返回一个 int 代表“两个比较数之间的词法关系”。因此,要检查字符串是否相同,您需要检查返回的 int 是否为 0:

      if (String.Compare(psSearch, psContacts[piSub, 0], true) == 0)
      

      很难理解这个if 条件需要在代码中的哪个位置才能使其工作。无论如何,无论需要在哪里进行字符串比较,您都应该检查String.Compare() 的结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-26
        • 1970-01-01
        • 2010-12-07
        • 1970-01-01
        • 1970-01-01
        • 2016-02-12
        • 1970-01-01
        相关资源
        最近更新 更多