概述
已有文档:reference/blocks/text.md 介绍了文本积木块。本文以实战场景为主,特别是”按空格拆分字符串”等常见需求。
核心文本操作
按空格拆分字符串
当 按钮_拆分.被点击
设 原文 = "Hello World App Inventor 2"
设 结果 = 分割文本(原文, " ")
' 结果 = ["Hello", "World", "App", "Inventor", "2"]
设 显示 = ""
设 i = 1
当 i ≤ 列表长度(结果)
设 显示 = 显示 & "第" & i & "个:" & 列表第i项(结果) & "\n"
设 i = i + 1
标签_结果.文本 = 显示
处理多个空格
' "Hello World App" 中有连续空格
' 先替换连续空格为单空格
设 文本 = "Hello World App"
设 清理后 = 替换文本(文本, " ", " ") ' 替换双空格
设 清理后 = 替换文本(清理后, " ", " ") ' 再替换一次
设 结果 = 分割文本(清理后, " ")
按多种分隔符拆分
' 按 "逗号" 或 "分号" 或 "空格" 拆分
设 文本 = "苹果,香蕉 橙子;葡萄"
设 步骤1 = 分割文本(文本, ",") ' ["苹果", "香蕉 橙子;葡萄"]
设 步骤2 = 创建空列表
设 i = 1
当 i ≤ 列表长度(步骤1)
设 子列表 = 分割文本(列表第i项(步骤1), " ")
设 j = 1
当 j ≤ 列表长度(子列表)
设 子子列表 = 分割文本(列表第j项(子列表), ";")
设 k = 1
当 k ≤ 列表长度(子子列表)
设 步骤2 = 添加列表项(步骤2, 列表第k项(子子列表))
设 k = k + 1
设 j = j + 1
设 i = i + 1
' 步骤2 = ["苹果", "香蕉", "橙子", "葡萄"]
字符串截取
设 文本 = "Hello World"
设 前5个 = 文本开始到(文本, 5) ' "Hello"
设 后5个 = 文本从开始(文本, 7) ' "World"
设 中间 = 文本截取(文本, 2, 4) ' 从第2位取4个字符
设 长度 = 文本长度(文本) ' 11
提取文件扩展名
定义 获取扩展名(文件名) 返回 扩展名
设 位置 = 最后一次出现(文件名, ".")
如果 位置 > 0
返回 文本从开始(文件名, 位置 + 1)
返回 ""
提取URL参数
定义 解析URL参数(网址) 返回 参数字典
设 参数部分 = 替换文本(从字典(网址参数)获取"query", "?", "")
设 对列表 = 分割文本(参数部分, "&")
设 结果 = 创建字典()
设 i = 1
当 i ≤ 列表长度(对列表)
设 键值 = 分割文本(列表第i项(对列表), "=")
如果 列表长度(键值) = 2
设 结果 = 设字典值(结果, 列表第1项(键值), 列表第2项(键值))
设 i = i + 1
返回 结果
字符串查找与替换
统计某个字符出现次数
定义 统计出现次数(文本, 目标) 返回 次数
设 源长度 = 文本长度(文本)
设 去除后 = 替换文本(文本, 目标, "")
设 去除长度 = 文本长度(去除后)
返回 (源长度 - 去除长度) / 文本长度(目标)
判断是否为数字
定义 是否为数字(文本) 返回 布尔值
设 数字字符 = "0123456789.-"
设 i = 1
当 i ≤ 文本长度(文本)
设 字符 = 文本第i个字符(文本)
如果 非 (数字字符 包含 字符)
返回 false
设 i = i + 1
返回 true
高级:正则表达式
已有 extensions/Regex扩展(kevinkun.cn),可以更灵活地处理字符串:
' 用正则表达式按空白字符拆分
设 结果 = 调用 Regex1.分割("Hello World\tApp\nInventor", "\s+")
' 结果 = ["Hello", "World", "App", "Inventor"]
' 提取所有数字
设 结果 = 调用 Regex1.匹配全部("我有3个苹果和5个橘子", "\d+")
' 结果 = ["3", "5"]
' 验证手机号
设 是否有效 = 调用 Regex1.是否匹配("13800138000", "^1[3-9]\d{9}$")
常见问题
Q1: 分割后有空字符串元素?
设 结果 = 分割文本("a,,b,,c", ",")
' 结果 = ["a", "", "b", "", "c"]
' 过滤空元素
设 过滤后 = 创建空列表
设 i = 1
当 i ≤ 列表长度(结果)
如果 列表第i项(结果) ≠ ""
设 过滤后 = 添加列表项(过滤后, 列表第i项(结果))
设 i = i + 1
Q2: 如何反转字符串?
定义 反转字符串(文本) 返回 结果
设 结果 = ""
设 i = 文本长度(文本)
当 i ≥ 1
设 结果 = 结果 & 文本第i个字符(文本)
设 i = i - 1
返回 结果
总结
| 操作 | 积木块 | 说明 |
|---|---|---|
| 按分隔符拆分 | 分割文本(文本, 分隔符) | 最常用 |
| 截取前N个 | 文本开始到(文本, N) | 取前缀 |
| 从第N位取 | 文本从开始(文本, N) | 取后缀 |
| 替换 | 替换文本(文本, 旧, 新) | 替换一次 |
| 查找位置 | 第一次出现 / 最后一次出现 | 定位 |
| 正则匹配 | Regex扩展 | 高级场景 |
版权声明:MIT App Inventor 官方文档采用 CC BY-SA 4.0 授权,本文档由 ai2claw 🐝 整理。
扫码添加客服咨询