main content

根据输入字符串构造有效的 matlab 标识符 -凯发k8网页登录

根据输入字符串构造有效的 matlab 标识符

说明

示例

n = matlab.lang.makevalidname(s) 根据输入字符串 s 构造有效的 matlab® 标识符 nmakevalidname 函数并不保证 n 中的字符串是唯一的。

有效的 matlab 标识符是由字母数字(a–z、a–z、0–9)和下划线构成的字符向量,第一个字符应为字母且字符向量长度须小于或等于 namelengthmax

makevalidname 在替换任何非字母数字或下划线字符之前会先删除所有空白字符。如果空白字符后为小写字母,则 makevalidname 会将该字母转换为相应的大写字符。

示例

n = matlab.lang.makevalidname(s,name,value) 包括由一个或多个 name,value 对组参数指定的其他选项。

示例

[n, modified] = matlab.lang.makevalidname(___) 返回一个逻辑数组 modified,指示哪些元素已修改。您可以将此语法与前面语法中的任何输入参数结合使用。

示例

s = {'item_#','price/unit','1st order','contact'};
n = matlab.lang.makevalidname(s)
n = 1x4 cell
    {'item__'}    {'price_unit'}    {'x1storder'}    {'contact'}

在第一个和第二个元素中,makevalidname 将无效字符(#/)替换为下划线。在第三个元素中,makevalidname 添加了一个前缀(因为该字符向量不是以字母开头)、删除了空格,并将删除的空格后面的字符更改为大写。

将无效字符替换为相应的十六进制表示形式。

s = {'item_#','price/unit','1st order','contact'};
n = matlab.lang.makevalidname(s,'replacementstyle','hex')
n = 1x4 cell
    {'item_0x23'}    {'price0x2funit'}    {'x1storder'}    {'contact'}

在第一个和第二个元素中,makevalidname 将无效字符(#/)替换为其十六进制表示形式。在第三个元素中,makevalidname 添加了一个前缀(因为该字符向量不是以字母开头)、删除了空格,并将删除的空格后面的字符更改为大写。

删除无效字符。

n = matlab.lang.makevalidname(s,'replacementstyle','delete')
n = 1x4 cell
    {'item_'}    {'priceunit'}    {'x1storder'}    {'contact'}

makevalidname 删除了无效字符(#/)。在第三个元素中,makevalidname 添加了一个前缀(因为该字符向量不是以字母开头)、删除了空格,并将删除的空格后面的字符更改为大写。

s = {'1stmeasurement','2ndmeasurement','control'};
n = matlab.lang.makevalidname(s,'prefix','m_')
n = 1x3 cell
    {'m_1stmeasurement'}    {'m_2ndmeasurement'}    {'control'}

只有那些未以字母开头的元素前面添加了前缀。

s = {'a%name', 'name_1', '2_name'};
[n, modified] = matlab.lang.makevalidname(s)
n = 1x3 cell
    {'a_name'}    {'name_1'}    {'x2_name'}
modified = 1x3 logical array
   1   0   1

makevalidname 没有修改第二个元素。

输入参数

输入字符串,指定为字符向量、字符向量元胞数组或字符串数组。

名称-值参数

将可选的参数对组指定为 name1=value1,...,namen=valuen,其中 name 是参数名称,value 是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。

在 r2021a 之前,使用逗号分隔每个名称和值,并用引号将 name 引起来。

示例: 'replacementstyle','delete' 删除无效字符。

替换样式,指定为 'underscore''delete''hex'。该值控制 matlab 如何替换非字母数字字符。对于 replacementstyle 的所有值,matlab 将删除空白字符并将紧随空白的小写字母更改为大写。

replacementstyle描述
'underscore'(默认值)使用下划线替换非字母数字或非下划线的所有字符。'underscore'
'hex'将每个非字母数字或非下划线字符替换为对应的十六进制表示形式。'hex'
'delete'删除非字母数字或非下划线的所有字符。'delete'

makevalidname 替换非字母数字字符后,要为不是以字母开头的输入添加的前缀字符,指定为字符向量或字符串标量。例如,默认情况下,makevalidname 会为输入 '*hello' 添加前缀字符,因为在替换非字母数字字符后,该输入不是以字母开头 ('_hello')。但是,如果您指定的是将非字母数字字符删除的替换样式,则 makevalidname 不会添加前缀字符。在替换非字母数字字符后,输入将以字母开头 ('hello')。

有效前缀必须符合以下条件。

  • 以字母开头。

  • 只能包含字母数字字符和下划线。

  • 不能是 matlab 关键字。

  • 长度不能超过 namelengthmax 的值。

输出参数

有效的 matlab 标识符,以字符向量、字符向量元胞数组或字符串数组形式返回。输出与输入 s 具有相同的维度数。

元素修改指示符,以逻辑标量或数组形式返回,与输入 s 具有相同维度数。值 1 (true) 表示 makevalidname 已修改相应位置处的输入。值 0 (false) 表示 makevalidname 不需要修改相应位置处的输入。

提示

  • 要确保输入值有效且唯一,请先使用 matlab.lang.makevalidname,再使用 matlab.lang.makeuniquestrings

    s = {'my.name','my_name','my_name'};
    validvalues = matlab.lang.makevalidname(s)
    validuniquevalues = matlab.lang.makeuniquestrings(validvalues,{},...
        namelengthmax)
    validvalues = 
        'my_name'    'my_name'    'my_name'
    validuniquevalues = 
        'my_name'    'my_name_1'    'my_name_2'
  • 要自定义无效字符替换,请首先使用 strrepregexprep 等函数将无效字符转换为有效字符。例如,使用 strrep(s,'@','at')s 中的 '@' 字符转换为 'at'。然后再使用 matlab.lang.makevalidname 确保 s 中的所有字符都有效。

版本历史记录

在 r2014a 中推出

另请参阅

| | | | | | | |

网站地图