Часто задаваемые вопросы о Строковые массивы

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"

См. также

| | | | | | | | | | | |

Похожие темы