Строковые массивы были введены в 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 array
"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 array
{'Mercury'} {'Venus'} {'Earth'}
str = string(C)
str = 1x3 string array
"Mercury" "Venus" "Earth"
В дополнение к векторам символов можно преобразовать числовой, datetime, длительность и категориальные значения к строкам с помощью функции string
.
Преобразуйте числовой массив в массив строк.
X = [5 10 20 3.1416]; string(X)
ans = 1x4 string array
"5" "10" "20" "3.1416"
Преобразуйте значение datetime в строку.
d = datetime('now');
string(d)
ans = "21-Feb-2019 20:24:07"
Кроме того, можно считать текст из файлов в строковые массивы с помощью 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 array
"" "" ""
"" "" ""
Чтобы создать отсутствующую строку, преобразуйте отсутствующее значение с помощью функции string
. Отсутствующая строка отображается как <missing>
.
str = string(missing)
str = <missing>
Можно создать массив строк и с пустыми и с отсутствующими строками. Используйте функцию ismissing
, чтобы определить, какие элементы являются строками с отсутствующими значениями. Обратите внимание на то, что пустая строка не является отсутствующей строкой.
str(1) = ""; str(2) = "Gemini"; str(3) = string(missing)
str = 1x3 string array
"" "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 array
"Mercury" "Gemini" "Apollo"
Доступ к второму элементу во второй строке str
.
str(2,2)
ans = "Skylab B"
Присвойте новую строку вне границ str
. MATLAB расширяет массив и заполняет освобожденные элементы с отсутствующими значениями.
str(3,4) = "Mir"
str = 3x4 string array
"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 array
"Mercury" "Gemini" "Apollo" "Skylab" "Skylab B" "ISS"
Транспонируйте str1
и str2
. Конкатенация их и затем вертикально конкатенирует заголовки столбцов на массив строк. Когда вы конкатенируете векторы символов в массив строк, векторы символов автоматически преобразованы в строки.
str1 = str1'; str2 = str2'; str = [str1 str2]; str = [["Mission:","Station:"] ; str]
str = 4x2 string array
"Mission:" "Station:"
"Mercury" "Skylab"
"Gemini" "Skylab B"
"Apollo" "ISS"
Чтобы добавить текст к строкам, используйте оператор plus
, +
. Оператор plus
добавляет текст к строкам, но не изменяет размер массива строк.
Добавьте фамилию к массиву имен. Если вы добавляете вектор символов к строкам, то вектор символов автоматически преобразован в строку.
names = ["Mary";"John";"Elizabeth";"Paul";"Ann"]; names = names + ' Smith'
names = 5x1 string array
"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 array
"Mary Jones"
"John Adams"
"Elizabeth Young"
"Paul Burns"
"Ann Spencer"
Добавьте отсутствующую строку. Когда вы добавляете отсутствующую строку с оператором плюс, вывод является отсутствующей строкой.
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 array
"Mary" "Jones"
"John" "Adams"
"Elizabeth" "Young"
"Paul" "Burns"
"Ann" "Spencer"
Переключите столбцы names
так, чтобы фамилии были в первом столбце. Добавьте запятую после каждой фамилии.
names = [names(:,2) names(:,1)];
names(:,1) = names(:,1) + ','
names = 5x2 string array
"Jones," "Mary"
"Adams," "John"
"Young," "Elizabeth"
"Burns," "Paul"
"Spencer," "Ann"
Соедините фамилии и имена. Функция join
помещает пробел между строками, которые она соединяет. После соединения names
является массивом строк 5 на 1.
names = join(names)
names = 5x1 string array
"Jones, Mary"
"Adams, John"
"Young, Elizabeth"
"Burns, Paul"
"Spencer, Ann"
Сортировка элементов names
так, чтобы они были в алфавитном порядке.
names = sort(names)
names = 5x1 string array
"Adams, John"
"Burns, Paul"
"Jones, Mary"
"Spencer, Ann"
"Young, Elizabeth"
ismissing
| isspace
| join
| plus
| sort
| split
| string
| strings
| strlength