Низ: Разлика между версии

Изтрито е съдържание Добавено е съдържание
м интервал преди запетая
м стринг > низ редактирано с AWB
Ред 123:
</source></big>
'''Разцепване на низ по разделител''' <br>
За да се изведат в масив елементите от списък записан в стрингниз се ползва метода <code>Split()</code>, на който подаваме разделител или масив от разделители. Тъй като при списъците има допиране на разделители, често се получават празни полета в новосъздадения масив, затова в параметрите на метода подаваме <code>StringSplitOptions.RemoveEmptyEntries</code>, който да приема два съседни разделителя за един.
<big><source lang="csharp">
string listOfNames = "Gosho, Pesho, Tosho, Ivan";
Ред 129:
string[] Names = listOfNames.Split(separators,StringSplitOptions.RemoveEmptyEntries);
</source></big>
'''Премахване на ненужни символи от стрингниз''' <br>
За да премахнем празни места (нови редове, интервали и табулации) в началото и в края на един символен низ използваме метода <code>Trim()</code>. При подаване на масив със символи същият метод ги търси и изтрива само тях в символния низ. Ако искаме да премахнем ненужните символи и празни места само в началото или само в края използваме съответно <code>TrimStart()</code> и <code>TrimEnd()</code>
<big><source lang="csharp">
Ред 144:
</source></big>
'''Оптимизация на паметта при символни низове''' <br>
Когато инициализираме променлива от тип string с низов [[литерал]], динамичната памет се обхожда и се прави проверка дали такава стойност вече съществува. Ако съществува, новата променлива просто се пренасочва към нея. Ако не, референцията се препраща да сочи към нов блок памет. Интернирането на низове в [[.NET_Framework|.NET]] е възможно, защото низовете по концепция са неизменими и няма опасност някой да промени областта, сочена от няколко стринговинизови променливи едновременно. Когато не инициализираме низовете с литерали, не се ползва интерниране. Все пак, ако искаме да използваме интерниране изрично, можем да го направим чрез метода <code>Intern()</code>. За да демонстрираме това по-долу използваме статичния метод <code>Object.ReferenceEquals()</code>, който проверява дали два обекта сочат към един и същ блок памет.
<big><source lang="csharp">
string declared = "Some text";
Ред 157:
 
=== String Builder ===
Конкатенирането на низове е много бавна операция. Това е заради факта, че всеки път трябва да се заделя нов буфер и да се презипише цялата информация в стринганиза наново, освен това стария буфер е неизползваем и той трябва да бъде изтрит от <code>Garbage collector</code>.
Затова се използва специално направен клас <code>StringBuilder</code>, този клас има предварително зададен буфер, който може да бъде динамично променян, благодарение на което работата със символни низове е много по-бърза. Когато сме завършили низа можем да извикаме метода <code>ToString()</code>, който да го преобразува в нормален стрингниз.
 
<source lang="csharp">
Ред 182:
 
=== Създаване на символни низове ===
Най-лесния начин за създаване на стрингниз е да се напише следното:
<source lang="java">String greeting = "Hello, world!";</source>
 
Ред 221:
 
=== Използване на <code>String.format()</code> ===
Класът <code>String</code> включва статичния метод <code>String.format()</code> за създаване на форматирани символни низове. Този метод позволява създаването на форматирани стринговенизове, които могат да се използват повторно, като само се променят параметрите. Този метод е подобен на метода <code>System.out.printf()</code>, който също форматира шаблонен низ и извежда стойности на местата на параметрите.
<source lang="java">
String example = String.format("%.2f", 3.141593); // "3.14"
Ред 227:
=== Извличане на част от низ ===
Извличането на част от низ в отделна променлива се прави чрез метода <code>substring()</code>, като зададем начална и крайна позиция в текста.
<code>String substring(int beginIndex, int endIndex)</code> - Резултата е нов стрингниз, като <code>beginIndex</code> показва от къде да започва новият стрингниз, а краят е <code>endIndex – 1</code>.
В случай че, не е упоменат <code>endIndex</code>, за край се счита последния символ от оригиналния символен низ.
<source lang="java">
Ред 247:
//World
</source>
Методите <code>toLowerCase()</code> и <code>toUpperCase()</code> връщат нов стрингниз като конвертират всички букви в малки или главни.
 
<source lang="java">
Ред 257:
System.out.println(example.toUpperCase()); //WELCOME TO WIKIPEDIA
</source>
<code>trim</code> методът връща нов стрингниз премахвайки интервалите в началото и края на оригиналния символен низ.
<source lang="java">
String example = new String(" Welcome to Wikipedia ");
Ред 331:
 
=== Сравняване на символни низове ===
* <code>boolean endsWith(String suffix)/ boolean startsWith(String prefix)</code> - връща стойност true ако стринганиза завършва или започва с подниз деклариран като стойност на метода.
<source lang="java">
String example = new String("Welcome to Wikipedia!");
Ред 354:
// true
</source>
* <code>int compareTo(String anotherString)</code> - сравнява два стринганиза лексикографски. За да бъдат два стринганиза еднакви, то те трябва да имат еднакъв брой символи и да бъдат подредени в един и същ ред. Този метод връща цяло положително, отрицателно число или 0 в зависимост от лексикографската наредба.
<source lang="java">
String example = "Hello, World";
Ред 364:
//0
</source>
* <code>int compareToIgnoreCase(String str)</code> – този метод сравнява два стринганиза лексикографкски, без да взима предвид дали са малки или големи буквите.
<source lang="java">
String example = "Hello, World";
Ред 404:
char str[13] = {'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd','!', '\0'};
</source>
В този пример се вижда какво представлява стринганиза отвътре. Забележете, че трябва да се остави място за [[Терминираща_нула|терминиращата нула]], защото благодарение на нея се разбира кога сме достигнали края на низа.
Тази конструкция може да се запише и съкратено по този начин:
<source lang="c">
Ред 417:
Тук указателят запазва адреса на първият символ, а останалите символи са следващите, докато не се достине до '\0'.
 
В C има [[Библиотека_(програмиране)|библиотека]] предназначена за работа със стринговенизове. За да я добавим трябва да поставим това отгоре на файла:
<source lang="c">
#include <string.h>
</source>
В тази библиотека са направени голямо количество от инструкции за работа съсс стринговенизове.
<source lang="c">
#include <string.h>
Ред 435:
Още за библиотеката <code>string.h</code> можете да намерите [[http://www.cplusplus.com/reference/cstring/]]
 
Друга полезна библиотека е <code>stdlib.h</code>, благодарение на нея може да превръщаме стринговенизове в числа.
<source lang="c">
int atoi(const char *str); //Връща целочислено число.
Ред 454:
</source>
== Низове в C++ ==
В [[C%2B%2B|С++]] съществува клас, намиращ се в <code>namespace std</code>, който поддържа работа с низове. Думата <code>string</code> е ключова дума. Запазването на стринговенизове в памета е по начина по който се запазват и в C(накрая има терминираща нула).
Работата със стринговенизове е много по-удобна, защото са предефинирани аритметичните знаци <code>+</code> и <code>=</code>.
<source lang="cpp">
string str = "Hello world!"; // Ако сме импортнали std.
Ред 464:
string str1 = "Hello";
string str2 = " world!";
string str3 = str1 + str2; // Копираме два стринганиза и ги даваме на трети.
str1 += str2; // Добавяне към първия стрингниз.
</source>
Освен това, [[Клас_(програмиране)|класът]] стрингниз поддържа и много допълнителни помощни функции.
<source lang="cpp">
string str = "Hello world!";
Ред 502:
</source>
 
<code>strlen()</code> - връща дължината на стринганиза
<source lang="php">
echo strlen("Hello world!");