Создание Строковых массивов

Строковые массивы были введены в R2016b. Строковые массивы храните фрагменты текста и предоставляйте набор функций для работы с текстом в качестве данных. Можно индексировать, изменять форму и конкатенировать массивы строк так же, как с массивами любого другого типа. Вы также можете получить доступ к символам в строке и добавить текст к строкам, используя plus оператор. Чтобы переставить строки в строковые массивы, используйте такие функции, как split, join, и sort.

Создайте Строковые массивы из переменных

MATLAB ® предоставляет строковые массивы для хранения фрагментов текста. Каждый элемент массива строковых массивов содержит последовательность символов 1 на n.

Начиная с R2017a, вы можете создать строку с помощью двойных кавычек.

str = "Hello, world"
str = 
"Hello, world"

В качестве альтернативы можно преобразовать вектор символов в строку с помощью string функция. chr является вектором 1 на 17 символов. str - строка 1 на 1, которая имеет тот же текст, что и вектор символов.

chr = 'Greetings, friend'
chr = 
'Greetings, friend'
str = string(chr)
str = 
"Greetings, friend"

Создайте строковые массивы, содержащий несколько строк, используя [] оператор. str - строковые массивы 2 на 3, которая содержит шесть строк.

str = ["Mercury","Gemini","Apollo";
       "Skylab","Skylab B","ISS"]
str = 2x3 string
    "Mercury"    "Gemini"      "Apollo"
    "Skylab"     "Skylab B"    "ISS"   

Найдите длину каждой строки в str с strlength функция. Использование strlength, не length, для определения количества символов в строках.

L = strlength(str)
L = 2×3

     7     6     6
     6     8     3

В качестве альтернативы можно преобразовать массив ячеек из векторов символов в строковые массивы с помощью string функция. MATLAB отображений строки в строковые массивы с двойными кавычками и отображениями векторы символов в массивах ячеек с одинарными кавычками.

C = {'Mercury','Venus','Earth'}
C = 1x3 cell
    {'Mercury'}    {'Venus'}    {'Earth'}

str = string(C)
str = 1x3 string
    "Mercury"    "Venus"    "Earth"

В дополнение к векторам символов можно преобразовать числовые, datetime, длительность и категориальные значения в строки с помощью string функция.

Преобразуйте числовой массив в строковые массивы.

X = [5 10 20 3.1416];
string(X)
ans = 1x4 string
    "5"    "10"    "20"    "3.1416"

Преобразуйте значение datetime в строку.

d = datetime('now');
string(d)
ans = 
"23-Mar-2021 17:00:13"

Кроме того, вы можете читать текст из файлов в строковые массивы с помощью readtable, textscan, и fscanf функций.

Создайте пустые и отсутствующие строки

Строковые массивы могут содержать как пустые, так и отсутствующие значения. Пустая строка содержит ноль символов. Когда вы отображаете пустую строку, результатом является пара двойных кавычек с ничем между ними (""). Отсутствующая строка является строкой, эквивалентной NaN для числовых массивов. Это указывает, где строковые массивы имеют отсутствующие значения. Когда вы отображаете отсутствующую строку, результат <missing>, без кавычек.

Создайте пустые строковые массивы с помощью strings функция. Когда вы звоните strings без аргументов возвращает пустую строку. Обратите внимание, что размер str 1 на 1, а не 0 на 0. Однако str содержит нулевые символы.

str = strings
str = 
""

Создайте пустой символьный вектор с помощью одинарных кавычек. Обратите внимание, что размер chr 0 на 0.

chr = ''
chr =

  0x0 empty char array

Создайте строковые массивы, где каждый элемент является пустой строкой. Вы можете предварительно выделить строковые массивы с strings функция.

str = strings(2,3)
str = 2x3 string
    ""    ""    ""
    ""    ""    ""

Чтобы создать отсутствующую строку, преобразуйте отсутствующее значение с помощью string функция. Отсутствующая строка отображается следующим <missing>.

str = string(missing)
str = 
<missing>

Можно создать строковые массивы с пустыми и отсутствующими строками. Используйте ismissing функция для определения, какие элементы являются строками с отсутствующими значениями. Обратите внимание, что пустая строка не является отсутствующей строкой.

str(1) = "";
str(2) = "Gemini";
str(3) = string(missing)
str = 1x3 string
    ""    "Gemini"    <missing>

ismissing(str)
ans = 1x3 logical array

   0   0   1

Сравните отсутствующую строку с другой строкой. Результат всегда 0 (false), даже когда вы сравниваете отсутствующую строку с другой отсутствующей строкой.

str = string(missing);
str == "Gemini"
ans = logical
   0

str == string(missing)
ans = logical
   0

Доступ к элементам строковых массивов

Строковые массивы поддержки операций над массивами такие как индексация и изменение формы. Используйте индексацию массива для доступа к первой строке str и все столбцы.

str = ["Mercury","Gemini","Apollo";
       "Skylab","Skylab B","ISS"];
str(1,:)
ans = 1x3 string
    "Mercury"    "Gemini"    "Apollo"

Доступ ко второму элементу во второй строке str.

str(2,2)
ans = 
"Skylab B"

Назначьте новую строку за пределами str. MATLAB расширяет массив и заполняет невыделенные элементы отсутствующими значениями.

str(3,4) = "Mir"
str = 3x4 string
    "Mercury"    "Gemini"      "Apollo"     <missing>
    "Skylab"     "Skylab B"    "ISS"        <missing>
    <missing>    <missing>     <missing>    "Mir"    

Доступ к символам в строках

Можно индексировать в строковые массивы с помощью фигурных скобок, {}, для прямого доступа к символам. Используйте фигурные скобки, когда вам нужно получить доступ к символам в строку элементе и изменить их. Индексация фигурными скобками обеспечивает совместимость для кода, который мог бы работать с строковыми массивами или массивами ячеек векторов символов. Но по возможности используйте строковые функции для работы с символами в строках.

Доступ ко второму элементу во второй строке с фигурными скобками. chr является вектор символов, а не строкой.

str = ["Mercury","Gemini","Apollo";
       "Skylab","Skylab B","ISS"];
chr = str{2,2}
chr = 
'Skylab B'

Получите доступ к вектору символов и верните первые три символа.

str{2,2}(1:3)
ans = 
'Sky'

Найдите символы пробел в строке и замените их штрихами. Используйте isspace функция для просмотра отдельных символов в строке. isspace возвращает логический вектор, который содержит истинное значение везде, где есть символ. Наконец, отобразите измененный строковый элемент, str(2,2).

TF = isspace(str{2,2})
TF = 1x8 logical array

   0   0   0   0   0   0   1   0

str{2,2}(TF) = "-";
str(2,2)
ans = 
"Skylab-B"

Обратите внимание, что в этом случае можно также заменить пространства с помощью replace функция, не прибегая к фигурной индексации скобок.

replace(str(2,2)," ","-")
ans = 
"Skylab-B"

Конкатенация строки в Строковые массивы

Объедините строки в строковые массивы так же, как вы бы объединяли массивы любого другого рода.

Конкатенация двух строковых массивов с помощью квадратных скобок, [].

str1 = ["Mercury","Gemini","Apollo"];
str2 = ["Skylab","Skylab B","ISS"];
str = [str1 str2]
str = 1x6 string
    "Mercury"    "Gemini"    "Apollo"    "Skylab"    "Skylab B"    "ISS"

Транспонирование str1 и str2. Объедините их, а затем вертикально соедините заголовки столбца в строковые массивы. Когда вы конкатенируете векторы символов в строковые массивы, векторы символов автоматически преобразуются в строки.

str1 = str1';
str2 = str2';
str = [str1 str2];
str = [["Mission:","Station:"] ; str]
str = 4x2 string
    "Mission:"    "Station:"
    "Mercury"     "Skylab"  
    "Gemini"      "Skylab B"
    "Apollo"      "ISS"     

Добавление текста к строкам

Чтобы добавить текст к строкам, используйте plus оператор, +. The plus оператор добавляет текст к строкам, но не изменяет размер строковых массивов.

Добавьте фамилию в массив имен. Если вы добавляете вектор символов к строкам, то вектор символов автоматически преобразуется в строку.

names = ["Mary";"John";"Elizabeth";"Paul";"Ann"];
names = names + ' Smith'
names = 5x1 string
    "Mary Smith"
    "John Smith"
    "Elizabeth Smith"
    "Paul Smith"
    "Ann Smith"

Добавьте различные последние имена. Вы можете добавить текст к строковым массивам из строковых массивов или из массива ячеек векторов символов. Когда вы добавляете нескалярные массивы, они должны быть того же размера.

names = ["Mary";"John";"Elizabeth";"Paul";"Ann"];
lastnames = ["Jones";"Adams";"Young";"Burns";"Spencer"];
names = names + " " + lastnames
names = 5x1 string
    "Mary Jones"
    "John Adams"
    "Elizabeth Young"
    "Paul Burns"
    "Ann Spencer"

Добавьте отсутствующую строку. При добавлении отсутствующей строки оператором plus выводится отсутствующая строка.

str1 = "Jones";
str2 = string(missing);
str1 + str2
ans = 
<missing>

Разделение, соединение и сортировка строковых массивов

MATLAB предоставляет богатый набор функций для работы со строковыми массивами. Для примера можно использовать split, join, и sort функции для переставки строковых массивов names чтобы имена были в алфавитном порядке по фамилии.

Разделение names на пространственных символах. Разделение изменений names от строковых массивов 5 на 1 до массива 5 на 2.

names = ["Mary Jones";"John Adams";"Elizabeth Young";"Paul Burns";"Ann Spencer"];
names = split(names)
names = 5x2 string
    "Mary"         "Jones"  
    "John"         "Adams"  
    "Elizabeth"    "Young"  
    "Paul"         "Burns"  
    "Ann"          "Spencer"

Переключите столбцы names так что последние имена находятся в первом столбце. Добавляйте запятые после каждого последнего имени.

names = [names(:,2) names(:,1)];
names(:,1) = names(:,1) + ','
names = 5x2 string
    "Jones,"      "Mary"     
    "Adams,"      "John"     
    "Young,"      "Elizabeth"
    "Burns,"      "Paul"     
    "Spencer,"    "Ann"      

Присоединяйтесь к последним и первым именам. The join функция помещает символ пространства между строками, к которым она присоединяется. После присоединения, names представляет собой строковые массивы 5 на 1.

names = join(names)
names = 5x1 string
    "Jones, Mary"
    "Adams, John"
    "Young, Elizabeth"
    "Burns, Paul"
    "Spencer, Ann"

Сортировка элементов names чтобы они были в алфавитном порядке.

names = sort(names)
names = 5x1 string
    "Adams, John"
    "Burns, Paul"
    "Jones, Mary"
    "Spencer, Ann"
    "Young, Elizabeth"

См. также

| | | | | | | |

Похожие темы