scala在字符串中替换某个字符_【Scala】Scala之String

一、前言

大数据领域的Spark、Kafka、Summingbird等都是由Scala语言编写而成,相比Java而言,Scala更精炼。由于笔者从事大数据相关的工作,所以有必要好好学习Scala语言,之前也学习过,但是没有记录,所以就会忘记,感觉Scala确实比Java方便精炼很多,下面以Scala Cookbook英文版作为参考资料,从头到尾梳理Scala相关知识点,也加深印象。PS:这是在研究Zookeeper源码的间隙中交叉学习,不至于总是看源码太枯燥。

二、String

在Scala的REPL环境中测试String的类型,可以发现其就是Java中的String。

所以可以使用Java中String的所有方法,如获取字符串的长度、连接多个字符串。在Scala中,由于String可以被隐式转化成StringOps类型,可将字符串看成一个字符序列,并且可以使用foreach方法遍历字符串的每个字符。

也可将字符串当成字符序列,使用for循环遍历每个字符

同理,也可将字符串当前字节序列,使用for循环遍历

由于字符串可以当成字符顺序集合(字符序列),而在集合上可进行多种操作,如filter

可以看到对字符串进行了过滤,去掉了l字符。filter方法是StringOps的方法,由于String会被隐式的转化为StringOps,因此可以调用此方法。

对于该隐式转化,是在Perdef对象中定义。

@inline implicit def augmentString(x: String): StringOps = new StringOps(x)

向封闭类中添加方法

在Java中,String被定义成final的,即无法继承String类或者添加任何方法,但在Scala中,我们可以通过隐式转化添加方法,下面例子展示了Scala的String拥有String的特性和集合的特性。

其中,drop方法和take方法都是Scala的序列(集合)的方法,而capitalize方法则是StringOps的方法,这种调用都是通过隐式转化完成的。

2.1 测试String的相等性

1. 问题描述

你需要比较两个字符串以判断它们是否相等,或者它们包含相同的字符序列。

2. 解决方案

定义了如下字符串s1、s2、s3

使用"=="进行相等性判断

可以看到s1、s2、s3均相等,而对于一个好的"=="方法而言,即便是有参数为空,也不会抛出异常。

若在比较过程中不区分大小写,则可将字符串转化成大写或小写进行比较。

然而,在对空字符串调用toUpperCase方法会抛出异常。

在Java中,想要比较不区分大小写比较两个字符串是否相等,则使用equalsIgnoreCase方法

3. 讨论

在Scala中,我们使用==方法来判定对象的相等性,这与Java不同,Java使用equals方法判定两个对象的相等性,== 是比较两个对象是否是同一个对象(内存地址相同)。在Scala中,== 方法在AnyRef(所有引用类型的父类)中定义,其首先会检查空值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值