《Scala编程实战》笔记 1 字符串

    科技2025-07-15  15

    字符串查找

    创建正则匹配表达式,在正则表达式字符串后加 .r

    val numPattern = "[0-9]".r val str = "1a2b" numPattern.findFirstIn(str).getOrElse(0) numPattern.findAllIn(str).toArray numPattern.findFirstIn(str).foreach(println)

    findFirstIn返回一个 Option 对象,处理方式一般有

    取值 getOrElse使用模式匹配对 Option 分类处理foreach 对值处理,如 println

    findAllIn返回一个迭代器,处理方式

    使用 foreach 对结果进行遍历使用 toArray 方法将迭代器转为 Array numPattern.findAllIn(str).toArray numPattern.findFirstIn(str).foreach(println)

    字符串替换

    方法1:

    直接在String对象上调用 replaceAll

    方法2:

    创建 regex 正则表达式对象,调用 replaceAllIn 方法

    注:结果须赋给新的变量

    字符串提取

    定义正则表达式

    提取为独立变量 val pattern1 = "num ([0-9])".r val pattern2 = "char ([A-z])".r val num1 = "num 1" val char1 = "char a" val pattern1(a) = num1 val pattern2(b) = char1 模式匹配

    添加自定义方法

    即为 String 类添加自定义方法,如

    val str = "ABC".increment

    定义一个隐式转换类,在该类中定义需要的方法来实现

    implicit class MyString(s: String) { def increment: String = s.map(a => (a+1).toChar) } val str = "ABC".increment

    注意:一个隐式转换类必须定义在允许定义方法的地方,不是最高层。也就是说隐式转换类必须定义在类、对象或包内部

    这样做的好处是不需要通过继承现有的类来添加新的行为,只需要在 import 时定义并引入新的方法,并把这些方法加入到当前范围内的所有 String 类中,工作原理:

    编译器需要在 String 上调用 increment 方法String 类中不存在该方法,编译器在当前范围内搜索一个接收 String 作为参数的隐式转换找到 MyString 类,在该类中找到了该方法
    Processed: 0.011, SQL: 8