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
.
Создайте вектор символов с помощью одинарных кавычек. Чтобы определить его длину, используйте функцию 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
| contains
| copyfile
| dir
| isempty
| length
| load
| plus
| size
| sprintf
| strcat
| string
| strlength