Строковые массивы были введены в 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, длительность и категориальные значения в строки с помощью 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 на 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
оператор, +
. The 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"
Добавьте отсутствующую строку. При добавлении отсутствующей строки оператором plus выводится отсутствующая строка.
str1 = "Jones";
str2 = string(missing);
str1 + str2
ans = <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"
Присоединяйтесь к последним и первым именам. The 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