Π’ экосистСмС 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π° с тСкстовыми Π΄Π°Π½Π½Ρ‹ΠΌΠΈ являСтся Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ для любого Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ строку Π½Π΅ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅, Π° ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°ΠΊΠΎΠ², Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ фактичСски Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ строку ΠΊΠ°ΠΊ массив символов. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ классичСских языков программирования, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ C++ ΠΈΠ»ΠΈ Java, Π³Π΄Π΅ доступ ΠΊ элСмСнту строки ΠΏΠΎ индСксу Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ, Π² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ 1Π‘ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ этой Π·Π°Π΄Π°Ρ‡Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ свои ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ особСнности ΠΈ ограничСния.

ПониманиС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры строковых ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… критичСски Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ Π·Π°Π΄Π°Ρ‡ парсинга слоТных тСкстов, Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ…. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ часто ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠ° для Π°Π½Π°Π»ΠΈΠ·Π° Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹. Однако стандартный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π² 1Π‘ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡŽ Π²ΠΈΠ΄Π° ΠœΠΎΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°[0], Ρ‡Ρ‚ΠΎ Π²Ρ‹Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ спСцифичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ для эмуляции Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивом.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим способы Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ тСкста, Π½ΡŽΠ°Π½ΡΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ ΠΈ эффСктивныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’Π°ΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ стандарт Unicode, Ρ‡Ρ‚ΠΎ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚ΠΎΠΊ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ подсчСта Π΄Π»ΠΈΠ½Ρ‹ ΠΈ извлСчСния подстрок. Π“Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎΠ΅ использованиС встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ распространСнных ошибок ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ вашСго ΠΊΠΎΠ΄Π°.

АрхитСктура строкового Ρ‚ΠΈΠΏΠ° Π² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ 1Π‘

Π’ основС Ρ‚ΠΈΠΏΠ° Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π² 1Π‘ Π»Π΅ΠΆΠΈΡ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ 16-Π±ΠΈΡ‚Π½Ρ‹Ρ… символов стандарта Unicode. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ фиксированный объСм памяти, Π½ΠΎ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΎΠ΄ΠΈΠ½ "символ" для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚Π°ΠΊΠΈΡ… Π΅Π΄ΠΈΠ½ΠΈΡ†, особСнно Ссли Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ слоТных эмодзи ΠΈΠ»ΠΈ диакритичСских Π·Π½Π°ΠΊΠ°Ρ…. Для программиста это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ понятиС "символ" Π² контСкстС 1Π‘ Π±Π»ΠΈΠΆΠ΅ ΠΊ ΠΏΠΎΠ½ΡΡ‚ΠΈΡŽ "ΠΊΠΎΠ΄ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹" (code unit), Ρ‡Π΅ΠΌ ΠΊ Π³Ρ€Π°Ρ„Π΅ΠΌΠ΅.

Когда ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ строки Π² массив, ΠΌΡ‹ фактичСски создаСм Π½ΠΎΠ²ΡƒΡŽ структуру Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° Массив, ΠΊΡƒΠ΄Π° ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ элСмСнты исходной строки. Π­Ρ‚ΠΎ дСйствиС Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ выдСлСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ зависит ΠΎΡ‚ Π΄Π»ΠΈΠ½Ρ‹ исходного тСкста: для ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… строк Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы negligible, Π½ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚ΠΎΠ² тСкста созданиС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ массива ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΡƒΠ·ΠΊΠΈΠΌ мСстом.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ строки Π² 1Π‘ ΡΠ²Π»ΡΡŽΡ‚ΡΡ нСизмСняСмыми (immutable). Π›ΡŽΠ±Π°Ρ опСрация, которая тСхничСски мСняСт строку (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°ΠΌΠ΅Π½Π° символа), Π½Π° самом Π΄Π΅Π»Π΅ создаСт Π½ΠΎΠ²ΡƒΡŽ строку Π² памяти, Π° ΡΡ‚Π°Ρ€ΡƒΡŽ удаляСт сборщиком мусора.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ модуля Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Π·Π²Π΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ Ρ†Π΅Π»Π΅ΡΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΡΡ‚ΡŒ создания ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ массива символов. Иногда эффСктивнСС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ цикличСский ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π‘Ρ€Π΅Π΄, Ρ‡Π΅ΠΌ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ массив. ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками Ρ‡Π΅Ρ€Π΅Π· свои встроСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ "ΡΠΈΡˆΠ½ΡƒΡŽ" Π»ΠΎΠ³ΠΈΠΊΡƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌΡƒ эффСкту.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ строки Π½Π° символы

Π‘Π°ΠΌΡ‹ΠΉ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ ΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ способ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ строку Π² Π½Π°Π±ΠΎΡ€ элСмСнтов β€” это использованиС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π‘Ρ‚Ρ€Π Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для разбиСния строки ΠΏΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŽ, Π½ΠΎ Ссли Π² качСствС раздСлитСля ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΡƒΡΡ‚ΡƒΡŽ строку "", ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ мСняСтся: ΠΎΠ½Π° Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ исходный тСкст Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ символы. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ массив строк, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт содСрТит ΠΎΠ΄ΠΈΠ½ Π·Π½Π°ΠΊ.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ пСрСмСнная ВСкст. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ массив, достаточно Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ:

МассивБимволов = Π‘Ρ‚Ρ€Π Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ(ВСкст, "");

Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ унивСрсалСн ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²ΠΎ всСх конфигурациях, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ управляСмыС Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ сСрвСрный ΠΊΠΎΠ΄. Однако стоит ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π‘Ρ‚Ρ€Π Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ массив строк, Π° Π½Π΅ массив чисСл (ΠΊΠΎΠ΄ΠΎΠ² символов). Если ваша Π·Π°Π΄Π°Ρ‡Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с числовыми прСдставлСниями Π·Π½Π°ΠΊΠΎΠ², потрСбуСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ шаг прСобразования.

πŸ’‘

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ "Π’ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ пустыС подстроки" Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π‘Ρ‚Ρ€Π Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ссли Π²Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ тСкст с мноТСствСнными ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ ΠΈΠ»ΠΈ спСцсимволами, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ структуру Π΄Π°Π½Π½Ρ‹Ρ….

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ являСтся Ρ€ΡƒΡ‡Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ Ρ‡Π΅Ρ€Π΅Π· Ρ†ΠΈΠΊΠ» с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π‘Ρ€Π΅Π΄. Π₯отя это Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ написания большСго количСства ΠΊΠΎΠ΄Π°, Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ процСссом ΠΈ позволяСт Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ символы "Π½Π° Π»Π΅Ρ‚Ρƒ", Π½Π΅ создавая Π»ΠΈΡˆΠ½ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² памяти. Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ Π‘Ρ‚Ρ€Π Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠΌ зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ: для Ρ€Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, для высоконагруТСнных Ρ†ΠΈΠΊΠ»ΠΎΠ² β€” Π²Ρ‚ΠΎΡ€ΠΎΠΉ.

πŸ“Š Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π·Π±ΠΎΡ€ΠΊΠΈ строки Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅?
Π‘Ρ‚Ρ€Π Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ с пустым Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ
Π¦ΠΈΠΊΠ» с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π‘Ρ€Π΅Π΄
Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° C++
ВстроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ поиска
Π”Ρ€ΡƒΠ³ΠΎΠ΅

Алгоритм Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° символов

Если использованиС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π‘Ρ‚Ρ€Π Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ»ΠΈ нСэффСктивно, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ классичСский Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. Для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ строки, которая получаСтся Ρ‡Π΅Ρ€Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°. Π¦ΠΈΠΊΠ» ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΎΡ‚ 1 Π΄ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ значСния, извлСкая ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ символу Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ здСсь β€” нумСрация. Π’ 1Π‘ нумСрация символов Π² строкС начинаСтся с Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языков, Π³Π΄Π΅ индСксация начинаСтся с нуля. Ошибка Π² этом ΠΌΠΎΠΌΠ΅Π½Ρ‚Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡŽ Π½Π΅Π²Π΅Ρ€Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Код для извлСчСния символа ΠΏΠΎ индСксу i Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π‘ΠΈΠΌΠ²ΠΎΠ» = Π‘Ρ€Π΅Π΄(Π˜ΡΡ…ΠΎΠ΄Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°, i, 1);

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ нСпосрСдствСнно Π² Ρ‚Π΅Π»ΠΎ Ρ†ΠΈΠΊΠ»Π°. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Π΅ символы ΠΈΠ»ΠΈ сразу ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ рСгистр. Π“ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΡ‹ΠΌ ΠΏΡ€ΠΈ написании слоТных парсСров ΠΈΠ»ΠΈ Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€ΠΎΠ² Π²Π²ΠΎΠ΄Π°, Π³Π΄Π΅ условия ΠΎΡ‚Π±ΠΎΡ€Π° символов ΠΌΠΎΠ³ΡƒΡ‚ динамичСски ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ.

β˜‘οΈ Алгоритм Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π±ΠΎΡ€Π°

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ: 0 / 4

Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌΠΈ строками (сотни тысяч символов) Ρ€ΡƒΡ‡Π½ΠΎΠΉ Ρ†ΠΈΠΊΠ» ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ бизнСса Ρ€Π°Π·Π½ΠΈΡ†Π° Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½Π° для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π° Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈ использовании понятных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… останСтся высокой.

Π Π°Π±ΠΎΡ‚Π° с ΠΊΠΎΠ΄Π°ΠΌΠΈ символов ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ БимвКод

Часто ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ тСкста нСдостаточно просто ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΠΊΠ°; трСбуСтся Π·Π½Π°Ρ‚ΡŒ Π΅Π³ΠΎ числовой ΠΊΠΎΠ΄. Для этих Ρ†Π΅Π»Π΅ΠΉ Π² языкС 1Π‘ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° функция БимвКод. Она Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ числовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ символа согласно Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Unicode. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ собствСнных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² символов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»Π°Ρ‚ΠΈΠ½ΠΈΡ†Π°) ΠΈΠ»ΠΈ сортировки.

ΠžΠ±Ρ€Π°Ρ‚Π½Π°Ρ опСрация выполняСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π‘ΠΈΠΌΠ², которая ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ числовой ΠΊΠΎΠ΄ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² строковоС прСдставлСниС. ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡ этих Π΄Π²ΡƒΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ позволяСт Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ со строкой ΠΊΠ°ΠΊ с массивом чисСл. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ получСния ΠΊΠΎΠ΄Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ символа:

ΠšΠΎΠ΄ΠŸΠ΅Ρ€Π²ΠΎΠ³ΠΎΠ‘ΠΈΠΌΠ²ΠΎΠ»Π° = БимвКод(Π‘Ρ€Π΅Π΄(ВСкст, 1, 1));

ИспользованиС ΠΊΠΎΠ΄ΠΎΠ² символов ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ возмоТности для арифмСтичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ тСкстом. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π²ΠΈΠ³Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ символа Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, рСализуя ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ ΡˆΠΈΡ„Ρ€Ρ‹, ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π»ΠΈ символ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Ρ†ΠΈΡ„Ρ€ (ΠΊΠΎΠ΄Ρ‹ ΠΎΡ‚ 48 Π΄ΠΎ 57). Π’Π°Π±Π»ΠΈΡ†Π° Unicode ΠΎΠ±ΡˆΠΈΡ€Π½Π°, ΠΈ Π·Π½Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄ΠΎΠ² основных Π³Ρ€ΡƒΠΏΠΏ символов Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ.

Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ОписаниС ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°
48–57 Π¦ΠΈΡ„Ρ€Ρ‹ 0-9 БимвКод("5") = 53
65–90 ЛатинскиС Π·Π°Π³Π»Π°Π²Π½Ρ‹Π΅ A-Z БимвКод("A") = 65
97–122 ЛатинскиС строчныС a-z БимвКод("a") = 97
1040–1071 ΠšΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Π° Π·Π°Π³Π»Π°Π²Π½Ρ‹Π΅ А-Π― БимвКод("А") = 1040

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с функциями ΠΊΠΎΠ΄ΠΎΠ² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ‹Ρ‚ΡŒ остороТным с суррогатными ΠΏΠ°Ρ€Π°ΠΌΠΈ. НСкоторыС Ρ€Π΅Π΄ΠΊΠΈΠ΅ символы Unicode ΠΊΠΎΠ΄ΠΈΡ€ΡƒΡŽΡ‚ΡΡ двумя 16-Π±ΠΈΡ‚Π½Ρ‹ΠΌΠΈ числами. Ѐункция БимвКод Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΊΠΎΠ΄ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ части Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ°Ρ€Ρ‹, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ спСцифичСских Π·Π½Π°ΠΊΠΎΠ², хотя Π² бизнСс-Π·Π°Π΄Π°Ρ‡Π°Ρ… это встрСчаСтся ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ€Π΅Π΄ΠΊΠΎ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ тСкста

Π’ высоконагруТСнных систСмах, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ 1Π‘:ERP ΠΈΠ»ΠΈ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΡ€Π³ΠΎΠ²Π»ΠΈ, объСм ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… тСкстов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ»ΠΎΡΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ. НСэффСктивная Ρ€Π°Π±ΠΎΡ‚Π° со строками Π² Ρ†ΠΈΠΊΠ»Π°Ρ… являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· частых ΠΏΡ€ΠΈΡ‡ΠΈΠ½ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΎΠ² провСдСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ массива ΠΈΠ· ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² символов ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ сборщика мусора (Garbage Collector), Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, Π½ΠΎ Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ΠΌ зависаниям систСмы.

Для ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Ρ‚Ρ€Π°Ρ‚ памяти рСкомСндуСтся ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ создания ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… массивов, Ссли Π² Π½ΠΈΡ… Π½Π΅Ρ‚ острой нСобходимости. ВмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π°ΠΊΠΊΡƒΠΌΡƒΠ»ΡΡ†ΠΈΡŽ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Π‘ΡƒΡ„Π΅Ρ€Π”Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ…Π”Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ сразу Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΡƒΡŽ строку Ρ‡Π΅Ρ€Π΅Π· Π‘Ρ‚Ρ€Π‘ΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ, Ссли Π»ΠΎΠ³ΠΈΠΊΠ° позволяСт. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΊΠΎΠ΄Π° часто Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΎΡ‚ΠΊΠ°Π·Π΅ ΠΎΡ‚ излишнСй абстракции Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ прямых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ строк Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° Ρ‡Π΅Ρ€Π΅Π· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ "+". Π­Ρ‚ΠΎ создаСт Π½ΠΎΠ²ΡƒΡŽ строку Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π—Π°ΠΏΠΈΡΡŒΠ’Π΅ΠΊΡΡ‚Π° ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² массив с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ соСдинСниСм.

Π’Π°ΠΊΠΆΠ΅ стоит ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎ контСкстС выполнСния. На сСрвСрС 1Π‘ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ со строками ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ быстрСС благодаря Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ рСсурсам, Π½ΠΎ сСтСвая ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСром ΠΌΠΎΠΆΠ΅Ρ‚ Π½ΠΈΠ²Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ. Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅, Ссли объСм Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅Π½.

Π‘Π΅ΠΊΡ€Π΅Ρ‚ быстрой ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… тСкстов

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ просто ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ лишниС символы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΎΠΉ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², это часто быстрСС, Ρ‡Π΅ΠΌ Ρ†ΠΈΠΊΠ» ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ условия.

Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ° Unicode ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅ символы

Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, 1Π‘ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Unicode. Π­Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ тСкстов Π½Π° Π»ΡŽΠ±Ρ‹Ρ… языках ΠΌΠΈΡ€Π°, Π½ΠΎ вносит Π½ΡŽΠ°Π½ΡΡ‹ Π² Ρ€Π°Π±ΠΎΡ‚Ρƒ с "массивом символов". Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ», Ρ€Π°Π·Π±ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ строку Π½Π° 16-Π±ΠΈΡ‚Π½Ρ‹Π΅ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹, ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Ρ€Π΅Π·Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ символ (Π³Ρ€Π°Ρ„Π΅ΠΌΡƒ) Π½Π° Π΄Π²Π΅ части, Ссли ΠΎΠ½ прСдставлСн суррогатной ΠΏΠ°Ρ€ΠΎΠΉ. Π­Ρ‚ΠΎ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π΅Π΄ΠΊΠΈΡ… ΠΈΠ΅Ρ€ΠΎΠ³Π»ΠΈΡ„ΠΎΠ² ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° эмодзи.

Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ (ЀИО, названия Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ², адрСса) это Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ основной Π½Π°Π±ΠΎΡ€ символов ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρ‹ ΠΈ Π»Π°Ρ‚ΠΈΠ½ΠΈΡ†Ρ‹ укладываСтся Π² ΠΎΠ΄Π½Ρƒ 16-Π±ΠΈΡ‚Π½ΡƒΡŽ ячСйку. Однако ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ с ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ сСтями ΠΈΠ»ΠΈ мСссСндТСрами, Π³Π΄Π΅ обильно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ эмодзи, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ эту ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ. Π”Π»ΠΈΠ½Π° строки, возвращаСмая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°, Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ суррогатныС ΠΏΠ°Ρ€Ρ‹ ΠΊΠ°ΠΊ Π΄Π²Π° символа.

Если ваша Π·Π°Π΄Π°Ρ‡Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ строгого соблюдСния Π³Ρ€Π°Π½ΠΈΡ† Π³Ρ€Π°Ρ„Π΅ΠΌ, стандартными срСдствами 1Π‘ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ слоТно. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях приходится ΠΏΡ€ΠΈΠ±Π΅Π³Π°Ρ‚ΡŒ ΠΊ внСшним ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ ΠΈΠ»ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ слоТныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π°Π½Π°Π»ΠΈΠ·Π° Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… масок. Для Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° 1Π‘ достаточно ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ "символ" Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ β€” это Π΅Π΄ΠΈΠ½ΠΈΡ†Π° хранСния, Π° Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΅Π΄ΠΈΠ½ΠΈΡ†Π° восприятия.

πŸ’‘

Π’ 99% бизнСс-Π·Π°Π΄Π°Ρ‡ 1Π‘ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ элСмСнт массива, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‡Π΅Ρ€Π΅Π· Π‘Ρ‚Ρ€Π Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ("", ""), соотвСтствуСт ΠΎΠ΄Π½ΠΎΠΌΡƒ Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ Π·Π½Π°ΠΊΡƒ тСкста.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования

Рассмотрим Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ: Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ Π½Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ. ΠŸΠ°Ρ€ΠΎΠ»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ хотя Π±Ρ‹ ΠΎΠ΄Π½Ρƒ Ρ†ΠΈΡ„Ρ€Ρƒ, ΠΎΠ΄Π½Ρƒ Π·Π°Π³Π»Π°Π²Π½ΡƒΡŽ Π±ΡƒΠΊΠ²Ρƒ ΠΈ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ символ. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ строки пароля Π² массив символов позволяСт Π»Π΅Π³ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅.

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” очистка Π½ΠΎΠΌΠ΅Ρ€Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π° ΠΎΡ‚ мусора. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ часто вводят Π½ΠΎΠΌΠ΅Ρ€Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ +7 (999) 000-00-00. ΠŸΡ€ΠΎΠΉΠ΄ΡΡΡŒ ΠΏΠΎ массиву символов ΠΈ оставив Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†ΠΈΡ„Ρ€Ρ‹ (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‡Π΅Ρ€Π΅Π· БимвКод), ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ чистый Π½ΠΎΠΌΠ΅Ρ€ для сохранСния Π² Π±Π°Π·Π΅. Π’Π°ΠΊΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Π² модулях Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Π°ΠΌΠΈ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎ.

Π’Ρ€Π΅Ρ‚ΠΈΠΉ сцСнарий β€” гСнСрация ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΠ»ΠΈ ΡˆΡ‚Ρ€ΠΈΡ…ΠΊΠΎΠ΄ΠΎΠ², Π³Π΄Π΅ трСбуСтся манипуляция ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌΠΈ позициями Π² строкС. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ строку ΠΊΠ°ΠΊ массив Π΄Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

ЧастыС ошибки ΠΈ способы ΠΈΡ… устранСния

Одной ΠΈΠ· самых распространСнных ошибок являСтся ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ элСмСнт массива ΠΈ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ измСнится исходная строка. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ массив, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ‡Π΅Ρ€Π΅Π· Π‘Ρ‚Ρ€Π Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ, являСтся ΠΊΠΎΠΏΠΈΠ΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ элСмСнта массива Π½Π΅ повлияСт Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ-источник. Для измСнСния строки Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π΅Ρ‘ Π·Π°Π½ΠΎΠ²ΠΎ ΠΈΠ· ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ массива.

Π’Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ часто Π·Π°Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΏΡ€ΠΎ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹. ΠŸΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ строки, Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, Π»ΠΈΠ΄ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈ Π·Π°ΠΌΡ‹ΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ элСмСнтами массива, Ρ‡Ρ‚ΠΎ Π»ΠΎΠΌΠ°Π΅Ρ‚ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π‘ΠΎΠΊΡ€Π› ΠΈ Π‘ΠΎΠΊΡ€ΠŸ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… вСрсиях ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘. ВсСгда тСстируйтС ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π° Ρ‚ΠΎΠΉ вСрсии, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρƒ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ°.

НСкоррСктная Ρ€Π°Π±ΠΎΡ‚Π° с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ ΠΏΡ€ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΎ внСшниС систСмы β€” Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹ΠΉ камСнь. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ массива символов ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² Π±Π°ΠΉΡ‚Ρ‹ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΏΠΎ HTTP ΠΈΠ»ΠΈ записи Π² Ρ„Π°ΠΉΠ» Π²Ρ‹ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡƒΡŽ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ (UTF-8, Windows-1251 ΠΈ Ρ‚.Π΄.).

МоТно Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ символ Π² строкС Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΠΎ индСксу?

НСт, Π² 1Π‘ строки нСизмСняСмы. Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π‘Ρ‚Ρ€ΠΎΠΊΠ°[1] = "А". НСобходимо ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ строку, Π·Π°ΠΌΠ΅Π½ΠΈΠ² Π½ΡƒΠΆΠ½Ρ‹ΠΉ участок, ΠΈΠ»ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ строку Π² массив, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ массив ΠΈ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ строку ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ.

Π§Π΅ΠΌ отличаСтся Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π° ΠΎΡ‚ количСства Π±Π°ΠΉΡ‚ Π² строкС?

Ѐункция Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство 16-Π±ΠΈΡ‚Π½Ρ‹Ρ… символов (ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° UTF-16). ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π±Π°ΠΉΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΡ€ΠΈ сохранСнии ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ большС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ количСству символов, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΠΎΠΌΡƒ Π½Π° 2.

Как быстро ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, состоит Π»ΠΈ строка Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· Ρ†ΠΈΡ„Ρ€?

Π‘Π°ΠΌΡ‹ΠΉ быстрый способ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ рСгулярныС выраТСния Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ РСгулярноСВыраТСниС с шаблоном ^\d+$. ΠŸΠ΅Ρ€Π΅Π±ΠΎΡ€ массива символов Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π½Π° Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… строках.

Π§Ρ‚ΠΎ Π²Π΅Ρ€Π½Π΅Ρ‚ Π‘Ρ‚Ρ€Π Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ для пустой строки?

Если ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΡƒΡΡ‚ΡƒΡŽ строку Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ Π‘Ρ‚Ρ€Π Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ с пустым Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ массив Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибок ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ элСмСнтам массива Π±Π΅Π· ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.

Π•ΡΡ‚ΡŒ Π»ΠΈ Ρ€Π°Π·Π½ΠΈΡ†Π° Π² скорости ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΈ Π‘Ρ‚Ρ€Π Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ?

На ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… строках Ρ€Π°Π·Π½ΠΈΡ†Π° Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½Π°. На ΠΎΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… тСкстах (дСсятки тысяч символов) встроСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ Π‘Ρ‚Ρ€Π Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ядра ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Ρ†ΠΈΠΊΠ» Π½Π° языкС 1Π‘ интСрпрСтируСтся.