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

Строковые массивы были введены в 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 array
    "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 array
    {'Mercury'}    {'Venus'}    {'Earth'}

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

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

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

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

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

d = datetime('now');
string(d)
ans = 
"21-Feb-2019 20:24:07"

Кроме того, можно считать текст из файлов в строковые массивы с помощью 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 array
    ""    ""    ""
    ""    ""    ""

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

str = string(missing)
str = 
<missing>

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

str(1) = "";
str(2) = "Gemini";
str(3) = string(missing)
str = 1x3 string array
    ""    "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 array
    "Mercury"    "Gemini"    "Apollo"

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

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

Присвойте новую строку вне границ str. MATLAB расширяет массив и заполняет освобожденные элементы с отсутствующими значениями.

str(3,4) = "Mir"
str = 3x4 string array
    "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 array
    "Mercury"    "Gemini"    "Apollo"    "Skylab"    "Skylab B"    "ISS"

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

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

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

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

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

names = ["Mary";"John";"Elizabeth";"Paul";"Ann"];
names = names + ' Smith'
names = 5x1 string array
    "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 array
    "Mary Jones"
    "John Adams"
    "Elizabeth Young"
    "Paul Burns"
    "Ann Spencer"

Добавьте отсутствующую строку. Когда вы добавляете отсутствующую строку с оператором плюс, вывод является отсутствующей строкой.

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 array
    "Mary"         "Jones"  
    "John"         "Adams"  
    "Elizabeth"    "Young"  
    "Paul"         "Burns"  
    "Ann"          "Spencer"

Переключите столбцы names так, чтобы фамилии были в первом столбце. Добавьте запятую после каждой фамилии.

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

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

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

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

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

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

| | | | | | | |

Похожие темы