

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在公式表达式中使用字符串函数
<a name="expression-string-functions"></a>

在[转换](transforms.md)和[指标](metrics.md)中，您可以使用以下函数对字符串进行操作。有关更多信息，请参阅 [在公式中使用字符串](expression-tutorials.md#use-strings-in-formulas)。

**重要**  
<a name="formula-output-rules"></a>公式表达式只能输出双精度值或字符串值。嵌套表达式可以输出其他数据类型，例如字符串，但整个公式的计算结果必须为数字或字符串。您可以使用 [jp 函数](#jp-definition)将字符串转换为数字。布尔值必须为 1（真）或 0（假）。有关更多信息，请参阅 [未定义值、无限值和溢出值](expression-tutorials.md#undefined-values)。


| 函数 | 说明 | 
| --- | --- | 
|  `len(s)`  |  返回字符串 `s` 的长度。  | 
|  `find(s, substring)`  |  返回字符串 `substring` 中字符串 `s` 的索引。  | 
|  `contains(s, substring)`  |  如果字符串 `s` 包含字符串 `substring`，则返回 `1`，否则，返回 `0`。  | 
|  `upper(s)`  |  以大写形式返回字符串 `s`。  | 
|  `lower(s)`  |  以小写形式返回字符串 `s`。  | 
|   `jp(s, json_path)`  |  `s`使用[JsonPath](https://github.com/json-path/JsonPath)表达式计算字符串`json_path`并返回结果。 请使用该函数执行以下操作： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/iot-sitewise/latest/userguide/expression-string-functions.html) 要从 JSON 结构中提取字符串值并将其作为数字返回，必须使用多个嵌套 `jp` 函数。外部 `jp` 函数从 JSON 结构中提取字符串，内部 `jp` 函数将字符串转换为数字。 该字符串 `json_path` 必须包含一个字符串文字。这意味着 `json_path` 不能是计算结果为字符串的表达式。 

**Example 示例**  
+ `jp('{"status":"active","value":15}', '$.value')` 返回 `15`。
+ `jp('{"measurement":{"reading":25,"confidence":0.95}}', '$.measurement.reading')` 返回 `25`。
+ `jp('[2,8,23]', '$[2]')` 返回 `23`。
+ `jp('{"values":[3,6,7]}', '$.values[1]')` 返回 `6`。
+ `jp('111', '$')` 返回 `111`。
+ `jp(jp('{"measurement":{"reading":25,"confidence":"0.95"}}', '$.measurement.confidence'), '$')` 返回 `0.95`。  | 
|  `join(s0, s1, s2, s3, ...)`  |  返回带有一个分隔符的串联字符串。此函数使用第一个输入字符串作为分隔符，并将剩余的输入字符串连接在一起。其行为类似于 Java 中的[连接（CharSequence 分隔符， CharSequence... 元素）](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#join-java.lang.CharSequence-java.lang.CharSequence...-)函数。 

**Example 示例**  
+ `join("-", "aa", "bb", "cc")` 返回 `aa-bb-cc`  | 
|  `format(expression: "format")` 或 `format("format", expression)`  |  返回指定格式的字符串。此函数将 `expression` 求值，然后以指定格式返回该值。其行为类似于 Java 中的 [format(String format, Object... args)](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#format-java.lang.String-java.lang.Object...-) 函数。有关支持的格式的更多信息，请参阅 *Java 平台标准版 7 API 规范*中的[类格式化程序](https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html)下的转换。 

**Example 示例**  
+ `format(100+1: "d")` 返回字符串，`101`。
+ `format("The result is %d", 100+1)` 返回字符串，`The result is 101`。  | 
|  `f'expression'`  |  返回一个连接的字符串。使用此格式化函数，您可以使用简单的表达式来连接和格式化字符串。这些函数可能包含嵌套表达式。可以使用 `{}`（大括号）对表达式进行插值。这与 Python 中的[格式化字符串字面值](https://docs.python.org/3/reference/lexical_analysis.html#f-strings)类似。 

**Example 示例**  
+ `f'abc{1+2: "f"}d'` 返回 `abc3.000000d`。要计算此示例表达式，请执行以下操作：

  1. `format(1+2: "f")` 返回浮点数 `3.000000`。

  1. `join('', "abc", 1+2, 'd')` 返回字符串，`abc3.000000d`。

  您也可以用以下方式编写表达式：`join('', "abc", format(1+2: "f"), 'd')`。  | 