Сравнение текста

Сравните текст символьных массивов и строковых массивов по-разному. Строковые массивы были введены в R2016b. Можно сравнить строковые массивы и векторы символов с реляционными операторами и с strcmp функция. Вы можете сортировать строковые массивы, используя sort функция, так же как вы отсортируете массивы любого другого типа. MATLAB ® также предоставляет функции для проверки символов в кусках текста. Для примера можно определить, какие символы в вектор символов или строковые массивы являются буквами или пробелами.

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

Можно сравнить строковые массивы для равенства с реляционными операторами == и ~=. Когда вы сравниваете строковые массивы, выход является логическим массивом, который имеет 1 где отношение верно, и 0 где это неправда.

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

str1 = "Hello";
str2 = "World";
str1,str2
str1 = 
"Hello"
str2 = 
"World"

Сравнение str1 и str2 для равенства.

str1 == str2
ans = logical
   0

Сравните строковые массивы с несколькими элементами с строковым скаляром.

str1 = ["Mercury","Gemini","Apollo";...
        "Skylab","Skylab B","International Space Station"];
str2 = "Apollo";
str1 == str2
ans = 2x3 logical array

   0   0   1
   0   0   0

Сравните строковые массивы с вектором символов. Пока одна из переменных является строковыми массивами, можно сделать сравнение.

chr = 'Gemini';
TF = (str1 == chr)
TF = 2x3 logical array

   0   1   0
   0   0   0

Индексируйте в str1 с TF чтобы извлечь строковые элементы, которые совпадали Gemini. Можно использовать логические массивы для индекса в массив.

str1(TF)
ans = 
"Gemini"

Сравните для неравенства используя ~= оператор. Индексируйте в str1 чтобы извлечь элементы, которые не совпадают 'Gemini'.

TF = (str1 ~= chr)
TF = 2x3 logical array

   1   0   1
   1   1   1

str1(TF)
ans = 5x1 string
    "Mercury"
    "Skylab"
    "Skylab B"
    "Apollo"
    "International Space Station"

Сравните два нескалярных строковых массивов. При сравнении двух нескалярных массивов они должны быть одинаковыми по размеру.

str2 = ["Mercury","Mars","Apollo";...
        "Jupiter","Saturn","Neptune"];
TF = (str1 == str2)
TF = 2x3 logical array

   1   0   1
   0   0   0

Индексируйте в str1 чтобы извлечь совпадения.

str1(TF)
ans = 2x1 string
    "Mercury"
    "Apollo"

Сравнение Строковых массивов с другими реляционными операторами

Можно также сравнить строки с реляционными операторами >, >=, <, и <=. Строки, начинающиеся с заглавных букв, приходят перед строками, начинающимися с строчных букв. Для примера строка "ABC" меньше "abc". Цифры и некоторые знаки препинания также приходят перед буквами.

"ABC" < "abc"
ans = logical
   1

Сравнение строковых массивов, содержащего имена, с другим именем с > оператор. Имена Sanchez, de Ponte, и Nash приходите за Matthews, потому что S, d, и N все больше M.

str = ["Sanchez","Jones","de Ponte","Crosby","Nash"]; 
TF = (str > "Matthews")
TF = 1x5 logical array

   1   0   1   0   1

str(TF)
ans = 1x3 string
    "Sanchez"    "de Ponte"    "Nash"

Сортировка Строковых массивов

Можно отсортировать строковые массивы. MATLAB ® сохраняет символы как Unicode ® с помощью UTF-16 схемы кодирования символов. Символы и строковые массивы сортируются согласно UTF-16 кода порядку точек. Для символов, которые также являются символами ASCII, этот порядок означает, что заглавные буквы приходят перед строчными буквами. Цифры и некоторые пунктуации также приходят перед буквами.

Отсортируйте строковые массивы str.

sort(str)
ans = 1x5 string
    "Crosby"    "Jones"    "Nash"    "Sanchez"    "de Ponte"

Отсортируйте строковые массивы 2 на 3. The sort функция сортирует элементы в каждом столбце отдельно.

sort(str2)
ans = 2x3 string
    "Jupiter"    "Mars"      "Apollo" 
    "Mercury"    "Saturn"    "Neptune"

Чтобы отсортировать элементы в каждой строке, отсортируйте str2 вдоль второго измерения.

sort(str2,2)
ans = 2x3 string
    "Apollo"     "Mars"       "Mercury"
    "Jupiter"    "Neptune"    "Saturn" 

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

Можно сравнить векторы символов и массивы ячеек векторов символов друг с другом. Используйте strcmp функция для сравнения двух символьных векторов или strncmp для сравнения первого N персонажи. Можно также использовать strcmpi и strncmpi для бездатчиковых сравнений.

Сравните два векторов символов с strcmp функция. chr1 и chr2 не равны.

chr1 = 'hello';
chr2 = 'help';
TF = strcmp(chr1,chr2)
TF = logical
   0

Обратите внимание, что MATLAB strcmp отличается от версии на C strcmp. Версия на C strcmp возвращает 0 когда два символьных массивов одинаковы, а не когда они разные.

Сравните первые два символа с strncmp функция. TF является 1 потому что оба вектора символов начинаются с символов he.

TF = strncmp(chr1,chr2,2)
TF = logical
   1

Сравните два массива ячеек векторов символов. strcmp возвращает логический массив, размер которого совпадает с размером массивов ячеек.

C1 = {'pizza'; 'chips'; 'candy'};
C2 = {'pizza'; 'chocolate'; 'pretzels'};
strcmp(C1,C2)
ans = 3x1 logical array

   1
   0
   0

Просмотр символов в строках и Символьных массивах

Можно просматривать символы в строковые массивы или символьные массивы с помощью isstrprop, isletter, и isspace функций.

  • The isstrprop просматривает символы в строковые массивы или символьные массивы.

  • The isletter и isspace функции просматривают символы только в символьные массивы.

Определите, какие символы в вектор символов являются пробельными. isspace возвращает логический вектор того же размера, что и chr.

chr = 'Four score and seven years ago';
TF = isspace(chr)
TF = 1x30 logical array

   0   0   0   0   1   0   0   0   0   0   1   0   0   0   1   0   0   0   0   0   1   0   0   0   0   0   1   0   0   0

The isstrprop функция может запрашивать символы для многих различных признаков. isstrprop может определить, являются ли символы в строке или векторе символов буквенно-цифровыми символами, десятичными или шестнадцатеричными цифрами или символами пунктуации.

Определите, какие символы в строке являются знаками препинания. isstrprop возвращает логический вектор, длина которого равна количеству символов в str.

str = "A horse! A horse! My kingdom for a horse!"
str = 
"A horse! A horse! My kingdom for a horse!"
isstrprop(str,"punct")
ans = 1x41 logical array

   0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1

Определите, какие символы в вектор символов chr - буквы.

isstrprop(chr,"alpha")
ans = 1x30 logical array

   1   1   1   1   0   1   1   1   1   1   0   1   1   1   0   1   1   1   1   1   0   1   1   1   1   1   0   1   1   1

См. также

| | | | | | | | | |

Похожие темы