Как прочитать только 20 символов из строки и сравнить с другой строкой? - PullRequest
7 голосов
/ 01 декабря 2011

Я работаю над хэшированием.Я хэширую фразу и могу использовать только 20 символов фразы.

Как прочитать только 20 символов строки?

Как сравнить строки, если они одинаковые?

Ответы [ 6 ]

12 голосов
/ 01 декабря 2011

сравнивает первые 20 символов строки a и b

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
}
9 голосов
/ 01 декабря 2011

Чтобы прочитать 20 символов строки, вы можете использовать метод подстроки. Так

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
    }
4 голосов
/ 01 декабря 2011

Подстрока в 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 голосов
/ 01 декабря 2011

Сравнить строку со строкой:

bool stringsAreEqual = str1 == str2;

Прочитайте первые 20 символов из строки (очень уверенный способ):

string first20chars = string.IsNullOrEmpty(str) 
                ? str
                : str.Length >= 20
                      ? str.Substring(0, 20)
                      : str;
3 голосов
/ 01 декабря 2011
string input = "...";
string first20 = input.Substring(0, 20);

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

См. String.Substring () , String.Equals () в MSDN.

0 голосов
/ 01 декабря 2011

Используйте Linq!

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

EDIT Как уже упоминалось в комментариях, чтобы изменить IEnumerable обратно на строку. Fixed

Вы можете сделать это только для перечислимых:

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

Если вы просто хотите проверить начало строк:

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