如何从字符串中只读取20个字符并与其他字符串进行比较?

时间:2011-12-01 09:41:23

标签: c# .net string-comparison

我正在研究哈希。我正在编写一个短语,我只能使用该短语的20个字符。

如何只阅读字符串的20个字符?

如果字符串相同,我该如何比较?

6 个答案:

答案 0 :(得分:12)

比较字符串ab

的前20个字符
if (String.Compare(a, 0, b, 0, 20) == 0)
{
    // strings are equal
}

对于特定于文化的比较规则,您可以使用此重载,它接受StringComparison enum

if (String.Compare(a, 0, b, 0, 20, StringComparison.CurrentCultureIgnoreCase) == 0)
{
    // case insensitive equal
}

答案 1 :(得分:9)

要读取20个字符串的字符,可以使用substring方法。所以

myString = myString.Substring(0,20);

将返回前20个字符。但是,如果您的字符少于20个,则会抛出异常。您可以使用这样的方法为您提供前20个,或者如果它更短,则为所有字符串。

string FirstTwenty( string input ){
  return input.Length > 20 ? input.Substring(0,20) : input;
}

然后比较它们

if(FirstTwenty(myString1).CompareTo(FirstTwenty(myString2)) == 0){
  //first twenty chars are the same for these two strings
}

如果是UpperCase,则使用此功能

 if (FirstTwenty(mystring1).Equals(FirstTwenty(myString2), StringComparison.InvariantCultureIgnoreCase))
    {
        //first twenty chars are the same for these two strings
    }

答案 2 :(得分:4)

将字符串与字符串进行比较:

bool stringsAreEqual = str1 == str2;

从字符串中读取前20个字符(非常有把握的方式):

string first20chars = string.IsNullOrEmpty(str) 
                ? str
                : str.Length >= 20
                      ? str.Substring(0, 20)
                      : str;

答案 3 :(得分:4)

C#string类中的子字符串返回一个新字符串,该字符串是该字符串的子字符串。子字符串从指定的给定索引开始,并扩展到给定的长度。

str = "This is substring test";
retString = str.Substring(5, 7); // "is"

在您的情况下,您必须使用

str.substring(0,20);

要比较两个字符串,请使用String.Equals()

String a = "Hello";
String b = "World";
if(a.Equals(b, true));

要忽略字符串的情况,您必须使用“true”。

答案 4 :(得分:3)

string input = "...";
string first20 = input.Substring(0, 20);

bool eq = String.Equals(first20, anotherString, StringComparison.Ordinal);

在MSDN上查看String.Substring()String.Equals()

答案 5 :(得分:0)

使用Linq!

if(new string(yourString.Take(20).ToArray()) == otherString.Take(20))
    ....

修改 如评论中所述,将IEnumerable更改回字符串。固定

您只能在枚举上执行此操作:

if(yourString.Take(20).SequenceEqual(other.AsEnumerable())
  ....

如果您只是想检查字符串的开头:

if(yourString.Take(20).SequenceEqual(other.Take(20))
  ....