MATLAB® ввел string
тип данных в R2016b. Начиная в R2018b, можно использовать строковые массивы, чтобы работать с текстом в продуктах MathWorks®. Строковые массивы хранят части текста и обеспечивают набор функций для работы с текстом как данные. Можно индексировать в, измениться и конкатенировать массивы строк, как вы можете с массивами любого другого типа. Для получения дополнительной информации см. Создание массивов строк.
В большинстве отношений массивы строк ведут себя как векторы символов и массивы ячеек из символьных векторов. Однако существует несколько основных отличий между строковыми массивами и символьными массивами, которые могут привести к результатам, которые вы не можете ожидать. Для каждого из этих различий существует рекомендуемый способ использовать строки, который приводит к ожидаемому результату.
Когда вы используете функции, такие как cd
dir
copyfile
, или load
функции в форме команды, избегайте использования двойных кавычек. В форме команды аргументы, заключенные в двойные кавычки, могут привести к ошибкам. Чтобы задать аргументы как строки, используйте функциональную форму.
С синтаксисом команд вы разделяете входные параметры пробелами, а не запятыми, и вы не заключаете входные параметры в круглые скобки. Например, можно использовать cd
функция с синтаксисом команд, чтобы изменить папки.
cd C:\Temp
Текст C:\Temp
вектор символов. В форме команды все аргументы всегда являются векторами символов. Если у вас есть аргумент, такой как имя папки, которое содержит пробелы, то задайте его как один входной параметр путем включения его в одинарные кавычки.
cd 'C:\Program Files'
Но если вы задаете аргумент с помощью двойных кавычек, затем cd
выдает ошибку.
cd "C:\Program Files"
Error using cd
Too many input arguments.
Сообщение об ошибке может варьироваться в зависимости от функции, которую вы используете и аргументы, которые вы задаете. Например, если вы используете load
функция с синтаксисом команд и задает аргумент с помощью двойных кавычек, затем load
выдает различную ошибку.
load "myVariables.mat"
Error using load
Unable to read file '"myVariables.mat"': Invalid argument.
В, двойных кавычках формы команды обработаны как часть буквенного текста, а не как оператор конструкции строки. Если вы записали эквивалент cd "C:\Program Files"
в функциональной форме затем это было бы похоже на вызов cd
с двумя аргументами.
cd('"C:\Program','Files"')
При определении аргументов как строк используйте синтаксис функций. Все функции, которые поддерживают синтаксис команд также синтаксис функции поддержки. Например, можно использовать cd
с синтаксисом функций и входными параметрами, которые удваивают заключенные в кавычки строки.
cd("C:\Program Files")
Когда вы имеете несколько строк, храните их в массиве строк, не массиве ячеек. Создайте массив строк с помощью квадратных скобок, не фигурных скобок. Строковые массивы более эффективны, чем массивы ячеек для того, чтобы сохранить и управлять текстом.
str = ["Venus","Earth","Mars"]
str = 1×3 string array "Venus" "Earth" "Mars"
Избегайте использования массивов ячеек строк. Когда вы используете массивы ячеек, вы бросаете преимущества производительности, которые прибывают из использования строковых массивов. И на самом деле, большинство функций не принимает массивы ячеек строк как входные параметры, опции или значения пар "имя-значение". Например, если вы задаете массив ячеек строк как входной параметр, затем contains
функционируйте выдает ошибку.
C = {"Venus","Earth","Mars"}
C = 1×3 cell array {["Venus"]} {["Earth"]} {["Mars"]}
TF = contains(C,"Earth")
Error using contains
First argument must be a string array, character vector, or cell array of character vectors.
Вместо этого задайте аргумент как массив строк.
str = ["Venus","Earth","Mars"]; TF = contains(str,"Earth");
Перед R2016b термин "массив ячеек строк" означал массив ячеек, элементы которого все содержат векторы символов. Но это более точно, чтобы назвать такие массивы ячеек "массивами ячеек из символьных векторов", отличить их от строковых массивов.
Массивы ячеек могут содержать переменные, имеющие любые типы данных, включая строки. Все еще возможно создать массив ячеек, элементы которого все содержат строки. И если вы уже указали, что массивы ячеек из символьных векторов в вашем коде, затем заменяющем одинарные кавычки на двойные кавычки, могут походить на простое обновление. Однако не рекомендуется, чтобы вы создали или использовали массивы ячеек строк.
length()
из строки возвращаются 1?Распространено использовать length
функция, чтобы определить количество символов в векторе символов. Но определить количество символов в строке, используйте strlength
функция, не length
.
Создайте вектор символов с помощью одинарных кавычек. Чтобы определить его длину, используйте функцию длины. Поскольку C
вектор, его длина равна количеству символов. C
вектор 1 на 11.
C = 'Hello world';
L = length(C)
L = 11
Создайте строку с теми же символами, с помощью двойных кавычек. Хотя это хранит 11 символов, str
массив строк 1 на 1 или скаляр строки. Если вы вызываете длину на скаляре строки, то выходным аргументом является 1
, неважно, сколько символов это хранит.
str = "Hello World";
L = length(str)
L = 1
Чтобы определить количество символов в строке, используйте strlength
функция, введенная в R2016b. Для совместимости, strlength
работает с векторами символов также. В обоих случаях strlength
возвращает количество символов.
L = strlength(C)
L = 11
L = strlength(str)
L = 11
Также можно использовать strlength
на строковых массивах, содержащих несколько строк и на массивах ячеек из символьных векторов.
length
функция возвращает размер самой долгой размерности массива. Для массива строк, length
возвращается количество обманывает самой долгой размерности массива. Это не возвращает количество символов в строках.
isempty("")
Return 0?Строка не может иметь никаких символов вообще. Такая строка является пустой строкой. Можно задать пустую строку с помощью пустой пары двойных кавычек.
L = strlength("")
L = 0
Однако пустая строка не является пустым массивом. Пустая строка является скаляром строки, который, оказывается, не имеет никаких символов.
sz = size("")
sz = 1×2 1 1
Если вы вызываете isempty
на пустой строке затем это возвращает 0
ложь
) потому что строка не является пустым массивом.
tf = isempty("")
tf = logical 0
Однако, если вы вызываете isempty
на пустом символьном массиве затем это возвращает 1
TRUE
). Символьный массив, заданный как пустая пара одинарных кавычек, ''
, символьный массив 0 на 0.
tf = isempty('')
tf = logical 1
Чтобы протестировать, не имеет ли часть текста никаких символов, лучшая практика состоит в том, чтобы использовать strlength
функция. Можно использовать тот же вызов, является ли вход скаляром строки или вектором символов.
str = ""; if strlength(str) == 0 disp('String has no text') end
String has no text
chr = ''; if strlength(chr) == 0 disp('Character vector has no text') end
Character vector has no text
Можно добавить текст к вектору символов с помощью квадратных скобок. Но если вы добавляете текст в массив строк с помощью квадратных скобок, затем новый текст конкатенирован как новые элементы массива строк. Чтобы добавить текст к строкам, используйте plus
оператор или strcat
функция.
Например, если вы конкатенируете две строки, затем результатом является 1 2 массив строк.
str = ["Hello" "World"]
str = 1×2 string array "Hello" "World"
Однако, если вы конкатенируете два вектора символов, затем результатом является более длинный вектор символов.
str = ['Hello' 'World']
chr = 'HelloWorld'
Чтобы добавить текст к строке (или к элементам массива строк), используйте plus
оператор вместо квадратных скобок.
str = "Hello" + "World"
str = "HelloWorld"
Как альтернатива, можно использовать strcat
функция. strcat
добавляет текст, являются ли входные параметры строками или векторами символов.
str = strcat("Hello","World")
str = "HelloWorld"
Используете ли вы квадратные скобки, plus
, или strcat
, можно задать произвольное число аргументов. Добавьте пробел между Hello
и World
.
str = "Hello" + " " + "World"
str = "Hello World"
cd
| contains
| copyfile
| dir
| isempty
| length
| load
| plus
| size
| sprintf
| strcat
| string
| strlength