【Kotlin】字符串操作 ② ( 字符串替换函数 replace | 字符串比较操作符 == 和 === | 字符串遍历 forEach )

news2025/1/21 13:58:13

在这里插入图片描述

文章目录

  • 一、字符串替换函数 replace
  • 二、字符串比较操作符 == 和 ===
  • 三、字符串遍历 forEach





一、字符串替换函数 replace



字符串替换函数 replace 函数原型如下 :

/**
 * 返回一个新字符串,通过替换此字符序列中匹配给定正则表达式的每个子字符串获得
 * 用给定的[替换]。
 *
 * [replacement]可以由文字文本和$-substitution的任意组合组成。来处理替换字符串
 * 使用[kotlin.text.Regex.Companion.escapeReplacement]方法进行转义。
 */
@kotlin.internal.InlineOnly
public inline fun CharSequence.replace(regex: Regex, replacement: String): String = regex.replace(this, replacement)

/**
 * 返回一个新字符串,通过替换此字符序列中匹配给定正则表达式的每个子字符串获得
 * 使用给定函数[transform]的结果,该函数接受[MatchResult],并返回一个字符串用作
 * 替换该匹配。
 */
@kotlin.internal.InlineOnly
public inline fun CharSequence.replace(regex: Regex, noinline transform: (MatchResult) -> CharSequence): String =
    regex.replace(this, transform)

代码示例 :

fun main() {
    var info = "hello world"
    var str = info.replace(Regex("[ol]")){
        when(it.value) {
            "o" -> "?"
            "l" -> "%"
            else -> it.value
        }
    }
    println(str)
}

在上述代码中 ,

第一个参数 regex: Regex , 是正则表达式 ,

对应代码中的 Regex("[ol]") , 该正则表达式的含义是 单个字符 o 或者 l ;

第二个参数 noinline transform: (MatchResult) -> CharSequence): String , 是返回 String 值的闭包 ,

对应代码中的 匿名函数 / Lambda 表达式 / 闭包 ,

其含义是 : 遇到字母 o 就替换为 ? , 遇到字母 l 就替换为 % , 其它字母保持不变 ;


执行结果 :

he%%? w?r%d

在这里插入图片描述





二、字符串比较操作符 == 和 ===



Kotlin 语言中的字符串比较操作符 :

  • == 的作用是 比较 两个字符串 的 字符内容是否 相等 ; 相当于 Java 中的 equals 方法 ;
  • === 的作用是 比较 两个字符串 的 堆内存中的 引用地址 是否相等 ; 相当于 Java 中的 == 操作符 ;

代码示例 :

fun main() {
    val name0 = "Tom"
    val name1 = "Tom"

    // 比较内容, 相当于 Java 中的 equals 方法
    println(name0 == name1)

    // 比较地址, 相当于 Java 中的 == 操作符
    // 二者都是常量池的相同地址
    println(name0 === name1)
}

执行结果 :

true
true

在这里插入图片描述


对比代码示例 :

fun main() {
    val name0 = "Tom"

    var str = "T"
    val name1 = str + "om"

    // 比较内容, 相当于 Java 中的 equals 方法
    println(name0 == name1)

    // 比较地址, 相当于 Java 中的 == 操作符
    // 此处由于 name1 是运行时计算出来的, 不是常量池中的常量
    // name0 是常量池中的常量
    println(name0 === name1)
}

执行结果 :

true
false

在这里插入图片描述





三、字符串遍历 forEach



调用 字符串 StringforEach 函数 ,

可以 遍历字符串中的每个字符 ,

并且 针对该字符 执行相应 Lambda 表达式 的操作 ;

forEach 函数 中 , 可以通过 it 参数 获取对应的 字符 ;

Lambda 表达式 就是 匿名函数 , 也是 闭包 ;


String#forEach 函数原型 :

/**
 * 在每个字符上执行给定的[动作]。
 */
public inline fun CharSequence.forEach(action: (Char) -> Unit): Unit {
    for (element in this) action(element)
}

代码示例 :

fun main() {
    val name = "Tom"
    name.forEach {
        println(it)
    }
}

执行结果 :

T
o
m

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/151806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一个芯片工程师的ADC学习笔记 (二)

众所周知,ADC主要用于对模拟信号进行数字采集,以进行数据处理。我们周围的信号一般都是不断变化的模拟量,如光、温度、速度、压力、声音等。然而,我们大多数人都使用数字设备。如果我们想方便地使用和处理信息,就需要将…

【机器学习】关联规则挖掘算法 + 三大案例实战 + Apriori算法 + Python代码实现

文章目录一、关联规则概述1.1 关联规则引入1.2 关联规则相关概念介绍1.2.1 样本、事务、项集、规则1.2.2 支持度、置信度1.2.3 提升度1.2.4 所有指标的公式二、Python实战关联规则2.1 使用 mlxtend 工具包得出频繁项集与规则2.1.1 安装 mlxtend 工具包2.1.2 引入相关库2.1.3 自…

MP3解码算法原理解析

一:MP3编解码整体结构介绍 看懵逼了是吧。这里面有很多概念需要一一讲解。 比特流:比特流是一种内容分发协议。它采用高效的软件分发系统和点对点技术共享大体积文件(如一部电影或电视节目),并使每个用户像网络重新分配…

记录--微信调用jssdk--Invalid Signature, updateAppMessageShareData: denied等问题

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 最近在做安卓内嵌入H5活动页拉新活动,遇到的棘手问题记录下, 一是为了日后遇到同样问题好回顾,二是希望能帮到有同样问题的兄弟。 废话不多说,先从最棘手…

【高阶数据结构】封装Map和Set

🌈欢迎来到数据结构专栏~~封装Map和Set (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort目前状态:大三非科班啃C中🌍博客主页:张小姐的猫~江湖背景快上车🚘,握好方向盘跟我有一起打天下嘞!送给自己的一…

蓝桥杯Python组排列和组合、二进制讲解

目录 一、排列 1、Python 的排列函数 permutations() 2、permutations() 按什么顺序输出序列(重要⭐) 3、易错点 二、组合 1、Python的组合函数combinations() 2、注意内容 三、手写排列和组合代码 1、手写排列代码(暴力法&#xff…

【PWA学习】2. 使用 Manifest, 让你的 WebApp 更 Native

引言 我们知道,在 chrome(等一些现代浏览器)中,你可以将访问的网站添加到桌面,这样就会在桌面生成一个类似 “快捷方式” 的图标,当你点击该图标时,便可以快速访问该网站(Web App) 我们以 demo 为例,其添加…

无监督聚类表征学习方法之对比学习(Contrastive Learning)——simclr方法

无监督聚类表征学习方法之对比学习(Contrastive Learning)——simclr方法 1.参考论文 《A Simple Framework for Contrastive Learning of Visual Representations》 2.无监督聚类表征学习方法 主要有几种: ①自动编码器(AutoEncoder,AE); ②变分自编码器(Variatio…

两款开源.NET工作流引擎 Elsa 与ccflow使用比较

相对java开源的工作流程引擎.net开源的工作流程引擎相对较少,这里整理两款.net开源工作流引擎,做一下对比使用。elsa示例代码:Githubd地址:https://github.com/zhenl/MyElsaccflow下载地址:https://gitee.com/opencc/ccflowCCFlow…

Java笔记021-异常-Exception

异常-Exception看个实际问题和一段代码运行下面的代码,看看有什么问题->引出异常和异常处理机制package com12.exception_;/*** author 甲柒* version 1.0* title Exception01* package com12.exception_* time 2023/1/9 14:38*/ public class Exception01 {publ…

Mask RCNN网络源码解读(Ⅳ) --- Mask R-CNN论文解读

目录 1.Mask R-CNN简介 2.Mask分支 3.Mask R-CNN损失 4Mask分支预测使用 1.Mask R-CNN简介 回顾我们之前所说的图像分类、目标检测、语义分割的内容: 我们来看一下实例分割和语义分割的差别: Mask R-CNN不仅能够同时进行目标检测与分割,…

查找算法之二分查找

目录 二分查找 算法实现 “双闭区间”实现 算法实现 python C 两种表示对比 大数越界处理 优点与缺点 二分查找 二分查找,利用数据的有序性,通过每轮缩小一半搜索区间来查找目标元素。 使用二分查找有两个前置条件: 要求输入数据…

如何在GitLab上传本地项目

上传前需准备:需要安装Git,点击进入官网下载:Git 在本地上传GitLab项目的步骤目录介绍: 一、配置SSH秘钥(仅针对本机首次上传GitLab项目) 二、上传项目 1、新建一个空文件夹,并在该文件夹下右键…

Deque

Deque&#xff1a; “double ended queue&#xff08;双端队列&#xff09;”的缩写&#xff0c;通常读为“deck”&#xff1b; Deque是一个线性集合&#xff0c;支持在两端插入和移除元素。 Deque有三种用途&#xff1a; 双端队列(两端都可进出) Deque< Integer> de…

机器学习实战教程(十三):树回归基础篇

一、前言本篇文章将会讲解CART算法的实现和树的剪枝方法&#xff0c;通过测试不同的数据集&#xff0c;学习CART算法和树剪枝技术。二、将CART&#xff08;Classification And Regression Trees&#xff09;算法用于回归在之前的文章&#xff0c;我们学习了决策树的原理和代码实…

成功上岸字节全靠这份Redis技术笔记,深入浅出值得一看

前言 正如标题所说&#xff0c;我现在已经如愿以偿地进了字节&#xff01;之前自己一直待在一个不大不小的外包公司&#xff0c;每天做着重复的层删改查工作。直到22年年底&#xff0c;自己通过朋友的介绍拿到了字节的面试机会&#xff0c;自己在家复习了3个月&#xff0c;成功…

decltype类型指示符

decltype类型指示符一、什么是decltype类型指示符二、typeid运算符三、使用decltype指示符四、decltype和引用五、decltype(auto)六、本章代码汇总一、什么是decltype类型指示符 有时会遇到这种情况&#xff1a;希望从表达式的类型推断出要定义的变量的类型&#xff0c;但是不…

超实用的实用Shell脚本

一、Dos 攻击防范&#xff08;自动屏蔽攻击 IP&#xff09; 代码&#xff1a; #!/bin/bash DATE$(date %d/%b/%Y:%H:%M) LOG_FILE/usr/local/nginx/logs/demo2.access.log ABNORMAL_IP$(tail -n5000 $LOG_FILE |grep $DATE |awk {a[$1]}END{for(i in a)if(a[i]>10)print…

Spring 学习笔记2

1.spring设置JDBC链接池 classpath:jdbc.properties是有多个连接池时的写法&#xff0c;一般都用这种 还有就是配置文件里不要直接使用username&#xff0c;会被覆盖 使用${}来从文件里读取属性 <beans xmlns"http://www.springframework.org/schema/beans"xmlns…

bitmap原理+性能优化实践

目录 背景 总体结构 从RoaringBitmp说起 3.1arraycontainer 1.3.2 bitmapcontainer 1.3.3 runcontainer 上源码 Roaring64NavigableMap RoaringBitmap RoaringArray 三种Container ArrayContainer BitmapContainer RunContainer 工作应用 需求 分析 能否多线…