《仓颉语言实战》仓颉字符串与字符处理10+技巧:顺手写一个猜数字小游戏
【免费下载链接】仓颉语言实战-张磊仓颉语言实战由张磊编写,清华大学出版社出版。 该书践行“零基础入门仓颉语言”的理念,具有内容通俗易懂,知识点循序渐进的特点,可以帮助读者快速掌握仓颉编程语言。项目地址: https://gitcode.com/Cangjie-SIG/cangjieyuyanshizhan-ZL
《仓颉语言实战》(张磊 著,清华大学出版社)是零基础入门仓颉语言的好帮手,书中第20章"字符及字符串处理"用十余个贴近开发的示例,系统讲解仓颉字符串与字符的常用操作方法,并带你亲手写一个猜数字小游戏,把字符串处理知识真正用起来。本文带你快速梳理这些仓颉字符串技巧,看懂游戏的实现思路。
为什么值得学仓颉字符串处理 📚
字符串是开发中出现频率最高的数据类型:解析用户输入、拼接日志、格式化输出、处理文本文件……都离不开它。本章示例全部位于 code/Chapter20/ 目录,代码简洁、循序渐进,非常适合新手跟练。
本章涵盖的仓颉字符串技巧主要有 6 大类:
| 技巧类别 | 核心方法 | 示例文件 |
|---|---|---|
| 查找字符/子串 | indexOf、lastIndexOf | find_char_demo.cj |
| 截取子串 | 下标范围[start..end] | substring_demo.cj |
| 分割字符串 | split | split_demo.cj |
| 连接字符串 | +拼接、String.join | join_demo.cj |
| 去除空白字符 | trimAscii系列 | trim_demo.cj |
| 字符判断与转换 | isAsciiNumber、toAsciiUpperCase等 | char_demo.cj |
仓颉字符串技巧速览
1️⃣ 查找字符和子字符串:indexOf / lastIndexOf
仓颉的indexOf既支持查单个字符(用b'A'这种字节字面量),也支持查子字符串,返回值是Option类型——找到返回Some(位置),没找到返回None,非常符合仓颉的类型安全风格。lastIndexOf还可以指定从哪个索引开始往前找。
📎 参考:find_char_demo.cj、find_substring_demo.cj
2️⃣ 截取子串:用下标范围一步到位
想取"从第 11 位到结尾"或"从第 15 位起 4 个字符",直接用下标范围表达式oriString[11..]、oriString[15..15+4]即可,不需要额外传参,写法清爽。
📎 参考:substring_demo.cj
3️⃣ 分割字符串:split 一行切成数组
split按指定分隔符把字符串切成数组,还能限制最多分割出的段数。处理诗词、CSV 数据、按标点断句等场景都很顺手,切完再配合trimAscii去掉每段前后空白,体验更佳。
📎 参考:split_demo.cj
4️⃣ 连接字符串:join 比循环拼接更快
把数组里的字符串连成一整串,循环+和String.join都能实现。书里用一个一百万次循环的性能对比实验证明:join的效率明显优于反复拼接,批量合并字符串时优先选join。
📎 参考:join_demo.cj
5️⃣ 去除首尾空白:trim 系列三件套
trimAscii():去除首尾空白trimAsciiStart():只去开头trimStart("前缀"):去指定前缀字符串
用户输入几乎都要过一遍trim,猜数字游戏里就大量使用了它。
📎 参考:trim_demo.cj
6️⃣ 字符判断与转换:一套 isAscii 方法走天下
isAsciiNumber()判断是不是数字、isAsciiLowerCase()判断是不是小写字母、isAsciiWhiteSpace()判断是不是空白,配合toAsciiUpperCase()做大小写转换,覆盖 90% 的字符处理需求。
📎 参考:char_demo.cj
顺手写一个猜数字小游戏 🎮
技巧学完了,书里用它们组合出一个完整的仓颉猜数字小游戏:每局程序随机生成 0~100 的数字,你只能用>、>=、==、<、<=等符号加数字向它"提问",它只回答 Yes 或 No,直到你猜中为止。完整代码见 figure_guessing_game.cj。
游戏逻辑是怎么实现的?
第一步:读取并清洗输入。每轮用Console.stdIn.readln()读一行,输入出错时兜底为"q",再trimAscii()去掉首尾空白:
var input = (Console.stdIn.readln() ?? "q").trimAscii()第二步:解析"符号 + 数字"。这是游戏的核心函数getOpAndNum,把>50、<=38、==47这类输入拆成操作符和数字两部分。它用上了本章多个技巧:
input.isEmpty()判空、input[0].isAsciiNumber()判断首字符类型input[0..=1]、input[2..]下标范围截取符号和数字Int64.tryParse(...)安全转整数,失败返回None,全程不抛异常
第三步:match 执行判断。根据操作符==、>、>=、<、<=分别计算真假并打印结果;猜中后提示按n开新局、按q退出,一个while循环串起整局游戏。
💡 这个小游戏把字符串解析、字符判断、安全类型转换、Option 模式匹配串成了一条完整链路,正是本章知识"学以致用"的缩影。
完整示例代码在哪看?
本章全部示例都集中在 code/Chapter20/ 目录,建议按"先单点技巧、后综合游戏"的顺序跟练:
- 字符技巧:char_demo.cj
- 查找字符/子串:find_char_demo.cj、find_substring_demo.cj
- 截取子串:substring_demo.cj
- 分割/连接:split_demo.cj、join_demo.cj
- 去空白:trim_demo.cj
- 综合实战:figure_guessing_game.cj
小结
掌握indexOf、split、join、trim和字符判断这几组方法,就能应付日常开发中绝大部分文本处理需求。照着《仓颉语言实战》第20章跟练一遍,再亲手把猜数字小游戏跑起来,你会发现:字符串处理,就是这么简单又实用 ✅
【免费下载链接】仓颉语言实战-张磊仓颉语言实战由张磊编写,清华大学出版社出版。 该书践行“零基础入门仓颉语言”的理念,具有内容通俗易懂,知识点循序渐进的特点,可以帮助读者快速掌握仓颉编程语言。项目地址: https://gitcode.com/Cangjie-SIG/cangjieyuyanshizhan-ZL
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考