Judul adalah keseluruhan pertanyaan. Bisakah seseorang memberi saya alasan mengapa ini terjadi?
c#
java
startswith
Dested
sumber
sumber
Saya akan coba uraikan apa yang dikatakan Jon Skeet.
Misalkan x, y dan z adalah string dan + operator sebenarnya adalah penggabungan, maka:
Jika kita dapat membagi z menjadi z = x + y itu berarti z dimulai dengan x. Karena setiap string z dapat dipisahkan menjadi z = "" + z maka setiap string dimulai dengan "".
Jadi, karena ("" + "abcd") == "abcd" berarti "abcd" dimulai dengan ""
sumber
Saya akan mulai dengan fakta terkait yang lebih mudah dipahami.
Himpunan kosong adalah bagian dari setiap himpunan.
Mengapa? The Definisi dari bagian negara yang
A
merupakan bagian dariB
jika setiap elemen dariA
unsurB
. Sebaliknya,A
bukan merupakan bagian dariB
jika ada elemenA
yang bukan merupakan elemenB
.Sekarang perbaiki satu set
B
. Saya akan menetapkan bahwa set kosong adalah bagian dariB
. Saya akan melakukan ini dengan menunjukkan bahwa bukan kasus set kosong bukan bagian dariB
. Jika himpunan kosong bukan bagian dariB
maka saya bisa menemukan elemen dari himpunan kosong yang tidak adaB
. Tetapi himpunan kosong tidak memiliki elemen apa pun dan karenanya saya tidak dapat menemukan elemen yang tidak ada di dalamnyaB
. Oleh karena itu, ini tidak terjadi bahwa himpunan kosong bukan merupakan bagian dariB
. Jadi, himpunan kosong harus merupakan bagian dariB
.Setiap string dimulai dengan string kosong.
Pertama, kita harus menyetujui definisi dimulai dengan . Membiarkan
s
dant
menjadistring
s Kami mengatakan bahwas
dimulai dengant
jikas.Length >= t.Length
dant.Length
karakter pertamat
cocok dengans
. Artinya,s.Length >= t.Length
dan untuk setiapInt32 index
hal itu0 <= index < t.Length
,s[index] == t[index]
adalah benar. Sebaliknya, kami akan mengatakan bahwas
tidak dimulai dengant
pernyataan ifs.Length < t.Length
ataus.Length >= t.Length
dan adaInt32 index
semacam itu0 <= index < t.Length
dans[index] != t[index]
adalah benar. Dalam bahasa Inggris sederhana,
s
lebih pendek darit
, atau, jika tidak, ada karakter yangt
tidak cocok dengan karakter yang posisinya samas
.Sekarang perbaiki string
s
. Saya akan menetapkan itus
dimulai dengan string kosong. Saya akan melakukan ini dengan menunjukkan bahwa ini bukan kasus yangs
tidak dimulai dengan string kosong. Jikas
tidak dimulai dengan string kosong makas.Length < String.Empty.Length
ataus.Length >= String.Empty.Length
dan adaInt32 index
semacam itu0 <= index < String.Empty.Length
. Tetapis.Length >= 0
danString.Empty.Length
sama dengan nol sehingga tidak mungkin untuks.Length < String.Empty.Length
menjadi kenyataan. Demikian pula, karena `` String.Empty.Lengthis equal to zero, there is no
Int32 indexsatisfying
0 <= index <String.Empty.Length`. Karena itus.Length < String.Empty.Length
ataus.Length >= String.Empty.Length
dan adaInt32 index
semacam itu0 <= index < String.Empty.Length
salah. Oleh karena itu, bukan kasus yang
s
tidak dimulai dengan string kosong. Jadi,s
harus dimulai dengan string kosong.Berikut ini adalah implementasi start dengan kode sebagai perpanjangan dari
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; }
Dua fakta yang dicetak tebal di atas adalah contoh pernyataan yang benar-benar hampa . Mereka benar berdasarkan fakta bahwa pernyataan yang mendefinisikannya ( subset dan dimulai dengan ) adalah kuantifikasi universal atas alam semesta kosong. Tidak ada elemen di himpunan kosong, jadi tidak boleh ada elemen dari himpunan kosong tidak di himpunan tetap lainnya. Tidak ada karakter di string kosong, jadi tidak boleh ada karakter karena beberapa posisi di string kosong tidak cocok dengan karakter di posisi yang sama di string tetap lainnya.
sumber
Metode ini membandingkan parameter nilai ke substring di awal string ini yang sama panjangnya dengan nilai, dan mengembalikan nilai yang menunjukkan apakah sama atau tidak. Agar sama, nilai harus berupa string kosong (Empty), referensi ke instance yang sama ini, atau cocok dengan awal instance ini.
.NET String.StartsWith
true jika urutan karakter yang diwakili oleh argumen adalah awalan dari urutan karakter yang diwakili oleh string ini; false jika tidak. Perhatikan juga bahwa true akan dikembalikan jika argumennya adalah string kosong atau sama dengan objek String ini sebagaimana ditentukan oleh metode equals (Object).
Java String.startsWith
sumber
Anggap saja
"abcd".StartsWith("")
return false.jika demikian maka apa ekspresi berikut ini, benar atau salah:
("abcd".Substring(0,0) == "")
ternyata sama dengan true, sehingga string tersebut dimulai dengan string kosong ;-), atau dengan kata lain, substring "abcd" dimulai dari posisi 0 dan memiliki panjang 0 sama dengan string kosong "". Imo yang cukup logis.
sumber
null
akan menjadi nilai pengembalian yang sesuai.Dalam C # ini adalah bagaimana spesifikasi mengatakan untuk bereaksi;
sumber
Karakter N pertama dari dua string identik. N adalah panjang string kedua, yaitu nol.
sumber
JAWABAN NYATA:
Harus seperti itu kalau tidak Anda akan memiliki kasus di mana
"".startsWith("") == false "".equals("") == true but yet "a".startsWith("a") == true "a".equals("a") == true
dan kemudian kami akan memiliki Y2K lagi karena semua perangkat lunak bank yang bergantung pada string yang sama dimulai dengan diri mereka sendiri akan membuat akun kami tercampur dan tiba-tiba Bill Gates akan memiliki kekayaan saya dan saya akan memiliki miliknya, dan sial! Nasib tidak begitu baik bagiku.
sumber
Sekadar catatan, secara
String.StartsWith()
internal memanggil metodeSystem.Globalization.CultureInfo.IsPrefix()
yang membuat pemeriksaan berikut secara eksplisit:if (prefix.Length == 0) { return true; }
sumber
Karena string dimulai dengan baik dengan "nothing".
sumber
Jika Anda memikirkannya dalam istilah ekspresi reguler, itu masuk akal. Setiap string (bukan hanya "abcd", juga "" dan "sdf \ nff"), mengembalikan nilai true saat mengevaluasi ekspresi reguler 'dimulai dengan string kosong'.
sumber