Почему "abcd" .StartsWith ("") возвращает true?
16639 просмотра
11 ответа
Название это весь вопрос. Может кто-нибудь дать мне причину, почему это происходит?
Автор: Dested Источник Размещён: 12.11.2019 09:25Ответы (11)
163 плюса
Да, потому что он начинается с пустой строки. Действительно, пустая строка логически встречается между каждой парой символов.
Скажем так: какое определение «начинается с» вы могли бы дать, чтобы это исключило? Вот простое определение «начинается с», которое не имеет:
msgstr "x начинается с y, если первые y.Length
символы x соответствуют символам y."
Альтернативное (эквивалентное) определение:
«х начинается с у, если x.Substring(0, y.Length).Equals(y)
»
46 плюса
Я постараюсь уточнить, что сказал Джон Скит.
Допустим, x, y и z являются строками, а оператор + фактически является конкатенацией, тогда:
Если мы можем разделить z на запись z = x + y, это означает, что z начинается с x. Поскольку каждая строка z может быть разбита на z = "" + z, отсюда следует, что каждая строка начинается с "".
Итак, потому что ("" + "abcd") == "abcd" следует, что "abcd" начинается с ""
Автор: Petar Repac Размещён: 10.10.2008 10:0317 плюса
Этот метод сравнивает параметр value с подстрокой в начале этой строки, длина которой равна значению, и возвращает значение, указывающее, равны ли они. Чтобы быть равным, значение должно быть пустой строкой (Empty), ссылкой на этот же экземпляр или соответствовать началу этого экземпляра.
истина, если последовательность символов, представленная аргументом, является префиксом последовательности символов, представленной этой строкой; ложь в противном случае. Также обратите внимание, что true будет возвращено, если аргумент является пустой строкой или равен этому объекту String, как определено методом equals (Object).
Автор: Firas Assaad Размещён: 28.09.2008 09:0417 плюса
Я начну с того факта, который легче понять.
Пустой набор является подмножеством каждого набора.
Почему? Определение из подмножества состояний , что A
является подмножеством , B
если каждый элемент A
является элементом B
. И наоборот, A
не является подмножеством, B
если есть элемент, A
который не является элементом B
.
Теперь исправьте набор B
. Я установлю, что пустой набор является подмножеством B
. Я сделаю это, показав, что это не тот случай, когда пустой набор не является подмножеством B
. Если бы пустой набор не был подмножеством, B
я мог бы найти элемент пустого набора, которого нет в B
. Но пустой набор не имеет никаких элементов, и поэтому я не могу найти элемент, которого нет в B
. Следовательно, это не тот случай, когда пустой набор не является подмножеством B
. Таким образом, пустой набор должен быть подмножеством B
.
Любая строка начинается с пустой строки.
Во-первых, мы должны согласиться с нашим определением начинается с . Позвольте s
и t
быть string
s Мы говорим, что s
начинается с t
if s.Length >= t.Length
и первые t.Length
символы t
совпадают с теми из s
. То есть, s.Length >= t.Length
и каждый Int32 index
таким образом, что 0 <= index < t.Length
, s[index] == t[index]
верно. И наоборот, мы бы сказали, что s
не начинается, t
если утверждение
s.Length < t.Length
или s.Length >= t.Length
и есть Int32 index
такое, что 0 <= index < t.Length
иs[index] != t[index]
правда. В простом английском языке s
короче t
, или, если нет, есть символ, который t
не соответствует символу в той же позиции в s
.
Теперь исправьте строку ложно Следовательно, дело не в том, Ниже приведена реализация запусков с кодированным расширением Вышеупомянутые два смелых факта являются примерами бессмысленно верных утверждений . Они верны в силу того факта, что операторы, определяющие их ( подмножество и начинающиеся с ), являются универсальными количественными определениями для пустых вселенных. В пустом наборе нет элементов, поэтому в пустом наборе не может быть никаких элементов, кроме как в другом фиксированном наборе. В пустой строке нет символов, поэтому не может быть символа, поскольку некоторая позиция в пустой строке не соответствует символу в той же позиции в другой фиксированной строке.s
. Я установлю, что s
начинается с пустой строки. Я сделаю это, показав, что дело s
не в пустой строке. Если s
не начинается с пустой строки, то s.Length < String.Empty.Length
или s.Length >= String.Empty.Length
и есть Int32 index
такое, что 0 <= index < String.Empty.Length
. Но s.Length >= 0
и String.Empty.Length
равно нулю, поэтому невозможно s.Length < String.Empty.Length
быть правдой. Аналогично, поскольку `` String.Empty.Length is equal to zero, there is no
Int32 index satisfying
0 <= index s.Length < String.Empty.Length
или s.Length >= String.Empty.Length
и есть Int32 index
такое, что0 <= index < String.Empty.Length
s
что не начинается с пустой строки. Таким образом, s
должен начинаться с пустой строки.string
.public static bool DoStartsWith(this string s, string t) {
if (s.Length >= t.Length) {
for (int index = 0; index < t.Length; index++) {
if (s[index] != t[index]) {
return false;
}
}
return true;
}
return false;
}
11 плюса
Скажем так, "abcd".StartsWith("")
возвращает false.
если да, то что означает следующее выражение: true или false:
("abcd".Substring(0,0) == "")
получается, что значение равно true, поэтому строка начинается с пустой строки ;-), или, другими словами, подстрока «abcd», начинающаяся с позиции 0 и имеющая длину 0, равна пустой строке «». Довольно логичный имо.
Автор: Pop Catalin Размещён: 16.10.2008 02:587 плюса
В C # это то, как спецификация говорит ему реагировать;
Автор: blowdart Размещён: 28.09.2008 09:05Чтобы быть равным, значение должно быть пустой строкой (Empty), ссылкой на этот же экземпляр или соответствовать началу этого экземпляра.
4 плюса
Первые N символов двух строк идентичны. N - длина второй строки, т. Е. Ноль.
Автор: Ralph Размещён: 28.09.2008 09:054 плюса
Почему «abcd» .StartsWith («») возвращает true?
НАСТОЯЩИЙ ОТВЕТ:
Это должно быть так, иначе у вас был бы случай, когда
"".startsWith("") == false
"".equals("") == true
but yet
"a".startsWith("a") == true
"a".equals("a") == true
и тогда у нас снова будет Y2K, потому что все банковское программное обеспечение, которое зависит от равных условий, начиная с самих себя, перепутает наши счета, и внезапно Билл Гейтс получит мое богатство, и я получу его, и, черт побери! Судьба просто не такая для меня.
Автор: user804965 Размещён: 21.06.2011 11:104 плюса
Просто для записи, String.StartsWith()
внутренне вызывает метод, System.Globalization.CultureInfo.IsPrefix()
который явно выполняет следующую проверку:
if (prefix.Length == 0)
{
return true;
}
Автор: Tamas Czinege
Размещён: 27.01.2009 05:39
1 плюс
1 плюс
Если вы думаете об этом в терминах регулярных выражений, это имеет смысл. Каждая строка (не только «abcd», а также «» и «sdf \ nff») возвращает true при вычислении регулярного выражения «начинается с пустой строки».
Автор: AA22 Размещён: 28.09.2008 09:14Вопросы из категории :
- c# Преобразовать десятичную в двойную?
- c# Как рассчитать чей-то возраст в C #?
- c# Как вы сортируете словарь по значению?
- c# В чем разница между int и Integer в Java и C #?
- c# Как создать новый экземпляр объекта из Типа
- c# Datatable против Dataset
- java Как я могу определить IP моего маршрутизатора / шлюза в Java?
- java Каков наилучший способ проверки XML-файла по сравнению с XSD-файлом?
- java Как округлить результат целочисленного деления?
- java Преобразование списка <Integer> в список <String>
- java Почему я не могу объявить статические методы в интерфейсе?
- startswith Почему "abcd" .StartsWith ("") возвращает true?
- startswith Как проверить, является ли строка «StartsWith» другой строкой?
- startswith Как проверить, начинается ли строка C ++ std :: string с определенной строки, и преобразовать подстроку в int?
- startswith Regex для проверки начинается с http: //, https: // или ftp: //
- startswith JQuery - Как выбрать значение по имени атрибута начинается с
- startswith Elasticsearch "начинается с" первое слово в фразе