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

MATLAB® ввел string тип данных в R2016b. Начиная в R2018b, можно использовать строковые массивы, чтобы работать с текстом в продуктах MathWorks®. Строковые массивы хранят части текста и обеспечивают набор функций для работы с текстом как данные. Можно индексировать в, измениться и конкатенировать массивы строк, как вы можете с массивами любого другого типа. Для получения дополнительной информации см. Создание массивов строк.

В большинстве отношений массивы строк ведут себя как векторы символов и массивы ячеек из символьных векторов. Однако существует несколько основных отличий между строковыми массивами и символьными массивами, которые могут привести к результатам, которые вы не можете ожидать. Для каждого из этих различий существует рекомендуемый способ использовать строки, который приводит к ожидаемому результату.

Почему делает Используя форму команды со строками, возвращают ошибку?

Когда вы используете функции, такие как cddircopyfile, или 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"

Смотрите также

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

Похожие темы