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("")
возвращается 0?Строка не может иметь никаких символов вообще. Такая строка является пустой строкой. Можно задать пустую строку с помощью пустой пары двойных кавычек.
L = strlength("")
L = 0
Однако пустая строка не является пустым массивом. Пустая строка является скаляром строки, который, оказывается, не имеет никаких символов.
sz = size("")
sz = 1×2 1 1
Если вы вызываете isempty
на пустой строке, то он возвращает 0
(false
), потому что строка не является пустым массивом.
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
| содержит
| copyfile
| dir
| isempty
| длина
| загрузка
| плюс
| размер
| sprintf
| strcat
| строка
| strlength