В R2016b году были введены строковые массивы. В строковых массивах хранятся фрагменты текста и предоставляется набор функций для работы с текстом в качестве данных. Массивы строк можно индексировать в массивы, изменять их форму и конкатенировать с массивами любого другого типа. Также можно получить доступ к символам в строке и добавить текст в строки с помощью plus оператор. Чтобы переупорядочить строки в массиве строк, используйте такие функции, как split, join, и sort.
MATLAB ® предоставляет массивы строк для хранения фрагментов текста. Каждый элемент строкового массива содержит последовательность символов 1 на n.
Начиная с R2017a, можно создать строку с помощью двойных кавычек.
str = "Hello, world"str = "Hello, world"
В качестве альтернативы можно преобразовать символьный вектор в строку с помощью string функция. chr является символьным вектором 1 на 17. str - строка типа «1 на 1», текст которой совпадает с символьным вектором.
chr = 'Greetings, friend'chr = 'Greetings, friend'
str = string(chr)
str = "Greetings, friend"
Создание массива строк, содержащего несколько строк, с помощью [] оператор. str - массив строк 2 на 3, содержащий шесть строк.
str = ["Mercury","Gemini","Apollo"; "Skylab","Skylab B","ISS"]
str = 2x3 string
"Mercury" "Gemini" "Apollo"
"Skylab" "Skylab B" "ISS"
Найти длину каждой строки в str с strlength функция. Использовать strlength, не length, чтобы определить количество символов в строках.
L = strlength(str)
L = 2×3
7 6 6
6 8 3
В качестве альтернативы можно преобразовать массив ячеек символьных векторов в строковый массив с помощью string функция. MATLAB отображает строки в строковых массивах с двойными кавычками и векторы символов в ячейках с одиночными кавычками.
C = {'Mercury','Venus','Earth'}C = 1x3 cell
{'Mercury'} {'Venus'} {'Earth'}
str = string(C)
str = 1x3 string
"Mercury" "Venus" "Earth"
Помимо символьных векторов, числовые значения, значения datetime, duration и категориальные значения можно преобразовать в строки с помощью string функция.
Преобразование числового массива в строковый.
X = [5 10 20 3.1416]; string(X)
ans = 1x4 string
"5" "10" "20" "3.1416"
Преобразование значения datetime в строку.
d = datetime('now');
string(d)ans = "23-Mar-2021 17:00:13"
Кроме того, можно считывать текст из файлов в массивы строк с помощью readtable, textscan, и fscanf функции.
Массивы строк могут содержать как пустые, так и отсутствующие значения. Пустая строка содержит ноль символов. При отображении пустой строки получается пара двойных кавычек, между которыми нет ничего (""). Отсутствующая строка является строкой, эквивалентной NaN для числовых массивов. Указывает, где строковый массив имеет отсутствующие значения. При отображении отсутствующей строки результатом является <missing>, без кавычек.
Создание пустого строкового массива с помощью strings функция. При звонке strings без аргументов возвращает пустую строку. Обратите внимание, что размер str равно 1 на 1, а не 0 на 0. Однако str содержит нулевые символы.
str = strings
str = ""
Создайте пустой вектор символов, используя одинарные кавычки. Обратите внимание, что размер chr является 0-by-0.
chr = ''chr = 0x0 empty char array
Создайте строковый массив, в котором каждый элемент является пустой строкой. Можно предварительно назначить строковый массив с помощью strings функция.
str = strings(2,3)
str = 2x3 string
"" "" ""
"" "" ""
Чтобы создать отсутствующую строку, преобразуйте отсутствующее значение с помощью string функция. Отсутствующая строка отображается как <missing>.
str = string(missing)
str = <missing>
Можно создать строковый массив с пустыми и отсутствующими строками. Используйте ismissing чтобы определить, какие элементы являются строками с отсутствующими значениями. Обратите внимание, что пустая строка не является отсутствующей.
str(1) = ""; str(2) = "Gemini"; str(3) = string(missing)
str = 1x3 string
"" "Gemini" <missing>
ismissing(str)
ans = 1x3 logical array
0 0 1
Сравнение отсутствующей строки с другой строкой. Результат всегда 0 (false), даже когда вы сравниваете отсутствующую строку с другой отсутствующей строкой.
str = string(missing);
str == "Gemini"ans = logical
0
str == string(missing)
ans = logical
0
Строковые массивы поддерживают такие операции массива, как индексирование и изменение формы. Использовать индексирование массива для доступа к первой строке str и все колонки.
str = ["Mercury","Gemini","Apollo"; "Skylab","Skylab B","ISS"]; str(1,:)
ans = 1x3 string
"Mercury" "Gemini" "Apollo"
Доступ ко второму элементу во втором ряду str.
str(2,2)
ans = "Skylab B"
Назначение новой строки за пределами границ str. MATLAB расширяет массив и заполняет нераспределенные элементы отсутствующими значениями.
str(3,4) = "Mir"str = 3x4 string
"Mercury" "Gemini" "Apollo" <missing>
"Skylab" "Skylab B" "ISS" <missing>
<missing> <missing> <missing> "Mir"
Можно индексировать в строковый массив с помощью фигурных скобок, {}, для непосредственного доступа к символам. Фигурные скобки используются при необходимости доступа к символам строкового элемента и их изменения. Индексирование фигурными скобками обеспечивает совместимость кода, который может работать либо со строковыми массивами, либо с массивами ячеек символьных векторов. Но по возможности используйте строковые функции для работы с символами в строках.
Доступ ко второму элементу во втором ряду с фигурными скобами. chr - символьный вектор, а не строка.
str = ["Mercury","Gemini","Apollo"; "Skylab","Skylab B","ISS"]; chr = str{2,2}
chr = 'Skylab B'
Вызовите вектор символов и верните первые три символа.
str{2,2}(1:3)ans = 'Sky'
Найдите символы пробела в строке и замените их тире. Используйте isspace для проверки отдельных символов в строке. isspace возвращает логический вектор, содержащий истинное значение, где имеется пробел. Наконец, отобразите измененный строковый элемент, str(2,2).
TF = isspace(str{2,2})TF = 1x8 logical array
0 0 0 0 0 0 1 0
str{2,2}(TF) = "-";
str(2,2)ans = "Skylab-B"
Обратите внимание, что в этом случае можно также заменить помещения с помощью replace функция, не прибегая к индексации фигурных скобок.
replace(str(2,2)," ","-")
ans = "Skylab-B"
Объедините строки в строковый массив так же, как и массивы любого другого типа.
Соедините два массива строк, заключив их в квадратные скобки, [].
str1 = ["Mercury","Gemini","Apollo"]; str2 = ["Skylab","Skylab B","ISS"]; str = [str1 str2]
str = 1x6 string
"Mercury" "Gemini" "Apollo" "Skylab" "Skylab B" "ISS"
Переместить str1 и str2. Соедините их, а затем вертикально соедините заголовки столбцов со строковым массивом. При объединении символьных векторов в строковый массив символьные векторы автоматически преобразуются в строки.
str1 = str1'; str2 = str2'; str = [str1 str2]; str = [["Mission:","Station:"] ; str]
str = 4x2 string
"Mission:" "Station:"
"Mercury" "Skylab"
"Gemini" "Skylab B"
"Apollo" "ISS"
Чтобы добавить текст в строки, используйте plus оператор, +. plus добавляет текст к строкам, но не изменяет размер массива строк.
Добавьте фамилию к массиву имен. При добавлении символьного вектора к строкам он автоматически преобразуется в строку.
names = ["Mary";"John";"Elizabeth";"Paul";"Ann"]; names = names + ' Smith'
names = 5x1 string
"Mary Smith"
"John Smith"
"Elizabeth Smith"
"Paul Smith"
"Ann Smith"
Добавьте другие фамилии. Можно добавить текст в строковый массив из строкового массива или из массива ячеек из символьных векторов. При добавлении нескалярных массивов их размер должен быть одинаковым.
names = ["Mary";"John";"Elizabeth";"Paul";"Ann"]; lastnames = ["Jones";"Adams";"Young";"Burns";"Spencer"]; names = names + " " + lastnames
names = 5x1 string
"Mary Jones"
"John Adams"
"Elizabeth Young"
"Paul Burns"
"Ann Spencer"
Добавьте отсутствующую строку. При добавлении отсутствующей строки с помощью оператора «плюс» выходные данные являются отсутствующей строкой.
str1 = "Jones";
str2 = string(missing);
str1 + str2ans = <missing>
MATLAB предоставляет богатый набор функций для работы со строковыми массивами. Например, можно использовать split, join, и sort функции для переупорядочивания строкового массива names чтобы имена были в алфавитном порядке по фамилии.
Разделение names на символах пробела. Изменение разделения names из строкового массива 5 на 1 в массив 5 на 2.
names = ["Mary Jones";"John Adams";"Elizabeth Young";"Paul Burns";"Ann Spencer"]; names = split(names)
names = 5x2 string
"Mary" "Jones"
"John" "Adams"
"Elizabeth" "Young"
"Paul" "Burns"
"Ann" "Spencer"
Переключение столбцов names чтобы фамилии были в первом столбце. Добавьте запятую после каждой фамилии.
names = [names(:,2) names(:,1)];
names(:,1) = names(:,1) + ','names = 5x2 string
"Jones," "Mary"
"Adams," "John"
"Young," "Elizabeth"
"Burns," "Paul"
"Spencer," "Ann"
Присоединяйтесь к последней и первой именам. join помещает символ пробела между объединяемыми строками. После присоединения, names является строковым массивом 5 на 1.
names = join(names)
names = 5x1 string
"Jones, Mary"
"Adams, John"
"Young, Elizabeth"
"Burns, Paul"
"Spencer, Ann"
Сортировать элементы names чтобы они были в алфавитном порядке.
names = sort(names)
names = 5x1 string
"Adams, John"
"Burns, Paul"
"Jones, Mary"
"Spencer, Ann"
"Young, Elizabeth"
ismissing | isspace | join | plus | sort | split | string | strings | strlength