文档管理中心
我的
内容分发主题中心开发教程主题引擎HarmonyOS 4.X及以下版本主题引擎规范基础功能表达式字符串表达式<StringExpression>

字符串表达式<StringExpression>

功能概述

支持字符型表达式的解析,相比于数值型的表达式,其返回值为字符串型,不能够作为数值进行计算,只能作为字符串相关的函数的参数,字符串表达式的主要功能提供了不同的操作字符串的功能。字符串表达式内只能嵌套字符串表达式的函数、字符串、字符串变量、数值型变量。其他功能点中类型为字符串且支持表达式的参数可以调用字符串表达式解析能力。

应用场景

可实现不同的节日显示对应的图片。

XML规范

说明
  • 支持数组:如@string[expression],索引支持表达式解析。
  • 支持数值和字符串型的全局变量解析:如#num,@str。注意:如果需要在字符串表达式中进行数值计算不能以#num这样的变量开头,如#num*10会被认为是取名为"num*10"的数值型变量,正确写法为:10*#10。
  • 支持下表中字符串函数。
  • 字符串表达式中的字符串必须使用单引号,例如"@a + 'hello' + @b"。注意:"+"在字符串表达式中表示字符串的拼接,即在解析字符串表达式时会首先根据"+"对表达式进行拆分,然后分别解析拆分后的子字符串表达式,最后将子字符串表达式结果拼接得到最终结果,"+"不支持数值的加法计算。
展开

表达式

注 释

substr(原字符串,字串开始位置,字串长度)

返回字符串的子串,substr('你好呀',1,2) = '好呀'

注意

字符位置是从左至右,索引从0开始。

strIsEmpty(str)

字符串是否为空,即“”,为空返回“true”字符串,否则返回“false”字符串。 例如:strIsEmpty(@abc) ,str可以是字符串、字符串变量、字符串函数,下同

strIndexOf(str1,str2)

字符串str2在字符串str1中首次出现的位置,索引从0开始,例如:strIndexOf('hello','he')=0,返回“0”,如果目标字符串没有出现则返回“-1”

strLastIndexOf(str1, str2)

字符串str2在字符串str1中最后出现的位置,索引从0开始,例如:strLastIndexOf('hello','l')=3,返回“3”,如果目标字符串没有出现则返回“-1”

strContains(str1,str2)

字符串str1中是否包含字符串str2,包含则返回"true",否则返回"false"。例如: strContains('hello','he')=true ,返回"true"

sign="center"trReplaceAll(str1,str2,str3)

将str1中所有的str2替换为str3 ,例如(strReplaceAll('hello','e','i')=”hillo“

preciseeval(str,数值/数值型变量)

计算str的值,其中第一位是字符串/字符串变量型/数字表达式函数的计算公式,第二位为数值/数值型变量标识保留的小数位数,例如: preciseeval('1/3',3)=0.333,返回数值字符串“0.333”。使用preciseeval运算符则其后不能使用其他的运算符和+连接符

formatDate('format',@time_sys)

返回指定格式的时间字符串,时间为此刻的系统时间,如:formatDate('yyyy-MM-dd hh:mm:ss',@time_sys)=“2019-08-23 19:15:10”,具体能够转换的时间和日期的格式可以参考系统日期占位符

plus(a,b)

返回a和b的和的整数值,其中a和b可以为字符串/字符串变量或者数值/数值变量/返回数值的字符串函数,例如:plus(3,3)=6,返回“6”

ifelse(x1,y1,x2,y2,...,xn,yn,z)

if (x1!=0) return y1; elseif(x2 !=0) return y2;...; else return z。从x1开始判断,若存在xi不等于0,则返回yi,否则一直往后判断,都不满足条件则最终返回z。xi为数字表达式,yi. z为返回的字符串结果,可以是字符串/字符串变量/字符串函数

+

用以拼接字符串,如#year+'/'+#month+'/'+#date,其中字符串必须使用单引号标明

  • 应用示例

示例一:字符串与变量混合拼接,取数值和字符串变量值并且拼接,如果20191001,该文本输出为2019/10/01。

收起
自动换行
深色代码主题
复制
  1. <Text x="650" y="1650" size="30" textExp="#year+'/'+#month+'/'+#date"/>

示例二:substr字符串函数使用,截取字符串子串。

收起
自动换行
深色代码主题
复制
  1. <Var name="a" expression="hello hello hello hello" type="string"/>
  2. <Var name="k" expression="3"/>
  3. <!--从索引0开始,截取3个字符,得到的为hel-->
  4. <Text x="50" y="0" size="30" format="substr(@a,0,3):%s" paras="substr(@a,0,3)"/>
  5. <!--首先内层substr截取@a,从0开始截取12个字符;后以该截取的字符作为外层substr的字符串,截取从变量#k=3开始的5个字符,最终返回"lo he"-->
  6. <Text x="50" y="0" size="30" format="substr(substr(@a,0,12),#k,5):%s" paras="substr(substr(@a,0,12),#k,5)"/>

示例三:preciseeval字符串函数使用,计算字符串的值并保留指定小数位数。

收起
自动换行
深色代码主题
复制
  1. <Var name="k" expression="3"/>
  2. <!--字符串数值计算,返回1除以3的值,并且值保留3个小数点,得到0.333-->
  3. <Text x="350" y="700" size="30" format="preciseeval('1/3',3):%s" paras="preciseeval('1/3',3)"/>
  4. <!--第一个参数支持数字表达式函数,-1/3小于1,lt函数值为1,保留#k=3位小数,最终返回1.000-->
  5. <Text x="50" y="600" size="30" format="preciseeval(lt(-1/3,1),#k):%s" paras="preciseeval(lt(-1/3,1),#k)"/>

示例四:格式化日期,显示当前时间小时和分钟时间会根据12小时或者24小时调整,如果当前是12小时制下午九点整则会显示09:00,24小时制会显示21:00。

收起
自动换行
深色代码主题
复制
  1. <Text x="350" y="450" size="30" format="formatDate('HH:mm',@time_sys):%s" paras="formatDate('HH:mm',@time_sys)"/>

示例五:字符串包含,检测字符串a中是否包含字符串“10”,结果是不包含,返回字符串false。

收起
自动换行
深色代码主题
复制
  1. <Var name="a" expression="hello hello hello hello" type="string"/>
  2. <Text x="50" y="1450" size="30" format="strContains(@a,'10'):%s" paras="strContains(@a,'10')"/>

示例六:argb函数使用,解析透明度和红绿蓝三原色的值,最终返回8位16进制颜色表示字符串。

收起
自动换行
深色代码主题
复制
  1. <Var name="c" expression="asdfghjklqwertyuiopxcvbnm,sdfghjklwertyuiopdfghjkxcvbnmfghjrtyui" type="string"/>
  2. <Var name="h" expression="100"/>
  3. <Var name="i" expression="100"/>
  4. <Var name="j" expression="100"/>
  5. <!--h,j,k变量值为100,strLastIndexOf函数的值为63,最终返回#643f6464-->
  6. <Text x="50" y="50" size="30" color="argb(#h,strLastIndexOf(@c,'i'),#i,#j)" text="argb(#h,strLastIndexOf(@c,'i'),#i,#j)"/>

示例七:strIsEmpty函数使用,判断字符串是否为空串。

收起
自动换行
深色代码主题
复制
  1. <Var name="a" expression="hello hello hello hello" type="string"/>
  2. <Var name="d" expression="" type="string"/>
  3. <!--@a不为空,所以返回false-->
  4. <Text x="600" y="100" size="30" format="strIsEmpty(@a):%s" paras="strIsEmpty(@a)"/>
  5. <!--@d为空,所以返回true-->
  6. <Text x="600" y="150" size="30" format="strIsEmpty(@d):%s" paras="strIsEmpty(@d)"/>
  7. <!--substr(@a,0,3)结果为hel,所以返回false-->
  8. <Text x="50" y="100" size="30" format="strIsEmpty(substr(@a,0,3)):%s" paras="strIsEmpty(substr(@a,0,3))"/>
  9. <!--substr(@d,0,3)结果为“”,所以返回true-->
  10. <Text x="50" y="150" size="30" format="strIsEmpty(substr(@d,0,3)):%s" paras="strIsEmpty(substr(@d,0,3))"/>

示例八:ifelse函数使用,条件判断。

收起
自动换行
深色代码主题
复制
  1. <Var name="c" expression="asdfghjklqwertyuiopxcvbnm" type="string"/>
  2. <!--@c内包含字符串'as',所以strContains函数值为1,所以返回2-->
  3. <Text x="50" y="650" size="30" format="ifelse(strContains(@c,'as'),2,3):%s" paras="ifelse(strContains(@c,'as'),2,3)"/>
  4. <!--@c内不包含字符串'hello',所以strContains函数值为0,所以返回'bb'-->
  5. <Text x="50" y="700" size="30" format="ifelse(strContains(@c,'hello'),'aa','bb'):%s" paras="ifelse(strContains(@c,'hello'),'aa','bb')"/>

示例九:plus函数使用,实现加法功能。

收起
自动换行
深色代码主题
复制
  1. <Var name="i" expression="100"/>
  2. <Var name="j" expression="100"/>
  3. <Var name="a" expression="hello hello hello hello" type="string"/>
  4. <!--i,j为100,相加等于200,所以最终返回200-->
  5. <Text x="50" y="900" size="30" format="plus(#i,#j):%s" paras="plus(#i,#j)"/>
  6. <!--strIndexOf函数返回 结果为2,所以最终返回3-->
  7. <Text x="50" y="950" size="30" format="plus(strIndexOf(@a,'l'),1):%s" paras="plus(strIndexOf(@a,'l'),1)"/>
  8. <!--strIndexOf函数返回结果分别为0,1,所以最终返回1-->
  9. <Text x="50" y="1000" size="30" format="plus(strIndexOf('asdfg','as'),strIndexOf('asdfg','sd')):%s" paras="plus(strIndexOf('asdfg','as'),strIndexOf('asdfg','sd'))"/>