Scala字符串常用函数

news2025/1/19 17:13:31

Scala字符串常用函数

  • 1. 子字符串-substring
  • 2. 字符串切分-split
  • 3. 去掉首尾空格-trim
  • 4. 与数值之间的转换
  • 完整代码
  • 参考链接

Scala中的字符串为String类型,其实就是Java中的java.lang.String。其常用函数如下:

1. 子字符串-substring

substring()方法返回字符串的子字符串。

substring()方法有以下两种形式:

  • substring(beginIndex: Int) beginIndex为开始索引,该形式得到从beginIndex开始,直到字符串末尾的子字符串。
  • substring(beginIndex: Int, endIndex: Int) beginIndex为开始索引,endIndex为结束索引,该形式得到从beginIndex开始(包含beginIndex)到endIndex(不包含endIndex)之间的子字符串。

以下来自菜鸟教程的图可以很好地说明:
子字符串-substring代码示例如下:

val str1 = "This is text"

println("返回值 :"+str1.substring(3))
println("返回值 :"+str1.substring(2, 7))
println("返回值 :"+str1.substring(2, str1.length))

运行结果:

返回值 :s is text
返回值 :is is
返回值 :is is text

注意 若endIndex超过字符串范围,会报String index out of range: 20错误。

2. 字符串切分-split

split() 方法根据匹配给定的正则表达式来拆分字符串,得到的结果为Array<String>

注意.$|* 等转义字符,必须得加 \\
注意:多个分隔符,可以用 | 作为连字符。

split() 方法有以下两种形式:

  • split(regex: String) regex为正则表达式分隔符。
  • split(regex: String, limit: Int) regex为正则表达式分隔符,limit为分割的份数,也就是说只对前limit个分隔符进行分割。
    示例代码如下:
val str2 = "Welcome-to-here"

println("- 分隔符返回值 :")
str2.split("-").foreach(println)

System.out.println("- 分隔符设置分割份数返回值 :")
str2.split("-", 2).foreach(println)

val str3 = "java.lang.String"
System.out.println("转义字符返回值 :")
str3.split("\\.", 3).foreach(println)

val str4 = "acount=? and uu =? or n=?"
println("多个分隔符返回值 :")
str4.split("and|or").foreach(println)

运行结果:

- 分隔符返回值 :
Welcome
to
here
- 分隔符设置分割份数返回值 :
Welcome
to-here
转义字符返回值 :
java
lang
String
多个分隔符返回值 :
acount=? 
 uu =? 
 n=?

3. 去掉首尾空格-trim

trim() 方法用于删除字符串的头尾空白符(含换行符),同时由于其无传入参数,括号可以省略。例如:

val str3 = "\n abc 12 \n "
println(str3.trim)
println("str3.trim length:"+str3.trim.length)
println(str3)
println("str3 length:"+str3.length)

运行结果:

abc 12
str3.trim length:6

 abc 12 
 
str3 length:11

4. 与数值之间的转换

字符串到数值的转换根据不同类型,可以通过以下方式进行:

  • Int - 整型 Integer.parseInt()
  • Long - 长整型 java.lang.Long.parseLong()
  • Float - 浮点型 java.lang.Float.parseFloat()
  • Double - 双精度浮点型 java.lang.Double.parseDouble()

示例代码如下:

val str_int: String = "23"
val str_float: String = "233.3"

val my_int: Int = Integer.parseInt(str_int)
val my_long: Long = java.lang.Long.parseLong(str_int)
val my_float: Float = java.lang.Float.parseFloat(str_float)
val my_double: Double = java.lang.Double.parseDouble(str_float)

println(my_int)
println(my_long)
println(my_float)
println(my_double)

运行结果:

23
23
233.3
233.3

注意 如果字符串格式不正确,则会抛出java.lang.NumberFormatException异常,可以考虑用try/catch来应对:

var odd_value: Long = 0L
try {
  odd_value = java.lang.Long.parseLong(str_float)
} catch {
  case e: NumberFormatException => {
    e.printStackTrace()
    println("Wrong format")
  }
}

完整代码

StringTest.scala

package com.xxx

object StringTest {
  def main(args: Array[String]): Unit = {
    val str1 = "This is text"

    println("返回值 :"+str1.substring(3))
    println("返回值 :"+str1.substring(2, 7))
    println("返回值 :"+str1.substring(2, str1.length))

    val str2 = "Welcome-to-here"

    println("- 分隔符返回值 :")
    str2.split("-").foreach(println)

    System.out.println("- 分隔符设置分割份数返回值 :")
    str2.split("-", 2).foreach(println)

    val str3 = "java.lang.String"
    System.out.println("转义字符返回值 :")
    str3.split("\\.", 3).foreach(println)

    val str4 = "acount=? and uu =? or n=?"
    println("多个分隔符返回值 :")
    str4.split("and|or").foreach(println)

    val str5 = "\n abc 12 \n "
    println(str5.trim)
    println("str5.trim length:"+str5.trim.length)
    println(str5)
    println("str5 length:"+str5.length)

    val str_int: String = "23"
    val str_float: String = "233.3"

    val my_int: Int = Integer.parseInt(str_int)
    val my_long: Long = java.lang.Long.parseLong(str_int)
    val my_float: Float = java.lang.Float.parseFloat(str_float)
    val my_double: Double = java.lang.Double.parseDouble(str_float)

    println(my_int)
    println(my_long)
    println(my_float)
    println(my_double)

    var odd_value: Long = 0L
    try {
      odd_value = java.lang.Long.parseLong(str_float)
    } catch {
      case e: NumberFormatException => {
        e.printStackTrace()
        println("Wrong format")
      }
    }
  }
}

参考链接

  1. Java substring() 方法 | 菜鸟教程

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

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

相关文章

AUTOSAR NvM 同步机制

一、部分 NvM API 解释 &#xff08;1&#xff09;Std_ReturnType NvM_ReadBlock(NvM_BlockIdType BlockId,void* NvM_DstPtr) 把Nv Block中的数据copy到NvM_DstPtr指向的RAM中&#xff0c;NvM_DstPtr可以是临时RAM&#xff0c;也可以是永久RAM&#xff08;永久RAM即配置工具…

自动化、智能、机器人-2023-

文明&#xff1a;农业、工业、信息、智能&#xff0c;以目前认知的四个阶段。 农业文明到工业文明&#xff1a;机械自动化 工业文明到信息文明&#xff1a;电气自动化 信息文明到智能文明&#xff1a;数据自动化 这些时代典型的机器人&#xff1a; 机械自动化 电气自动化 数…

Mini_Web开发

文章目录 服务器开发回顾面向对象服务端客户端&#xff08;浏览器&#xff09;请求数据处理判断不同的请求路径&#xff0c;返回不同的数据给前端 单独封装方法不同请求路径处理的方法再次拆分业务封装JSON数据处理 Mini_Web开发导入数据使用Python操作数据库使用pymysql模块日…

瑞吉外卖 - 编辑员工信息功能(9)

某马瑞吉外卖单体架构项目完整开发文档&#xff0c;基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成&#xff0c;有需要的胖友记得一键三连&#xff0c;关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料&#xff1a;https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

238:vue+openlayers绘制扩展,弓形、曲线、扇形、双箭头、进攻方向...

第238个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers中利用ol-plot插件进行绘制图形扩展,可以绘制弓形、弧形、标志旗、战斗进攻图形等等。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,请加载其他…

win11 下部署Vicuna-7B,Vicuna-13B模型,

运行Vicuna-7B需要RAM>30GB或者14GB的显存 运行Vicuna-13B需要RAM>60GB或者28GB的显存 如果没有上面的硬件配置请绕行了&#xff0c;我笔记本有64G内存&#xff0c;两个都跑跑看&#xff0c;使用python3.9&#xff0c;当时转换13b时一直崩溃后来发现是没有设定虚拟内存&…

Linux指令 快捷键

热键 上一次我们说到了linux的基本指令&#xff0c;这次我们先说一下热键 TAB TAB键在linux中有什么作用呢&#xff1f;&#xff1f; 在Linux中&#xff0c;假设我们想要输入的指令忘记了&#xff0c;我们可以TAB两下&#xff0c;帮我们补全命令或者假如命令太多&#xff0…

C++基础STL-set容器

set容器介绍&#xff1a; set译为集合&#xff0c;集合是按照特定顺序存储唯一元素的容器。在集合中&#xff0c;元素的值也标识它(值本身就是键&#xff0c;类型为T)&#xff0c;并且每个值必须是唯一的。集合中元素的值在容器中一次就不能修改(元素总是const)&#xff0c;但可…

python学习环境准备

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言本专栏文章旨在记录《Python编程从入门到实践》一书的学习笔记。 一、编程环境二、使用步骤1.修改默认python版本2.终端退出python解释器3.编写.py文件4.运行.p…

【Linux是如何发送网络包的?】

网络模型 为了使得多种设备能通过网络相互通信&#xff0c;和为了解决各种不同设备在网络互联中的兼容性问题&#xff0c;国际标准化组织制定了开放式系统互联通信参考模型&#xff08;Open System Interconnection Reference Model&#xff09;&#xff0c;也就是 OSI 网络模…

【工作中掌握10个就够了!!!】Linux中的10个最常见命令+vim三个基本操作

欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#xff1a;重难点★✔ 蓝色文字表示&#…

【macOS自带VNC远程】——Windows在外远程桌面控制macOS

文章目录 前言1.测试局域网内远程控制1.1 macOS打开屏幕共享1.2 测试局域网内VNC远程控制 2. 测试公网远程控制2.1 macOS安装配置cpolar内网穿透2.2 创建tcp隧道&#xff0c;指向5900端口 3. 测试公网远程控制4. 配置公网固定TCP地址4.1 保留固定TCP地址4.2 配置固定TCP端口地址…

Java | 一分钟掌握定时任务 | 4 - 多线程的Timer

作者&#xff1a;Mars酱 声明&#xff1a;本文章由Mars酱原创&#xff0c;部分内容来源于网络&#xff0c;如有疑问请联系本人。 转载&#xff1a;欢迎转载&#xff0c;转载前先请联系我&#xff01; 前言 JDK自带的Timer是无法做到多任务并发的&#xff0c;那么我们怎么处理多…

如何编写一份优质软件测试工程师简历的范文【建议收臧】

很多刚转行软件测试的小伙伴是不是不知道怎么写好一份优质的软件测试工程师的简历。今天呢&#xff0c;就给大家分享一下一个优质软件测试工程师简历的范文。记得收藏起来哦。 下面的案例&#xff1a;2-3年的软件测试工程的简历 姓 名&#xff1a;XXX 学历&#xff1a…

Zabbix“专家坐诊”第191期问答汇总

问题一 Q&#xff1a;snmp监控服务器风扇、温度等硬件信息需要要mib库吗&#xff1f; A&#xff1a;官网有相关的mib库可查&#xff0c;一般同大型号通用&#xff0c;直接去官方下就行。 问题二 Q&#xff1a;zabbix用的postgresqltimescaledb备份这个数据库的时候不想包含历…

【Linux】-Linux的权限

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树 ❤️‍&#x1fa79;作者宣言&#xff1a;认真写好每一篇博客 &#x1f4a8;作者gitee:gitee &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点 …

【C++】入门必备小知识

C入门 1. 域2. 命名空间2.1命名空间的定义2.2 命名空间的使用 3. C输入和输出4. 缺省参数5. 函数重载6. 引用7. auto8. 范围for9.nullptr空指针10.内联函数 1. 域 域就是作用域&#xff0c;同一个域不可以用同名的变量&#xff0c;不同域可以用同名变量&#xff0c;遵循局部优…

案例11:Java超市管理系统设计与实现开题报告

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

5年时间里,自动化测试于我带来的意义,希望你也能早点知道

摘要&#xff1a;在我有限的软件测试经历里&#xff0c;曾有一段专职的自动化测试经历。 接触自动化 那时第一次上手自动化测试&#xff0c;团队里用的是Python&#xff0c;接口自动化测试的框架是requestsExcelJenkins&#xff0c;APP自动化测试的框架是Appium。 整个公司当…

寻找差值结构的最优顺序

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点&#xff0c;AB训练集各由6张二值化的图片组成&#xff0c;让A中有6个1 差值结构的每行只能是二进制的3&#xff0c;6&#xff0c;5..3列每列1的数量为1&#xff0c;2&#xff0c;3.B中全是0&#xff0c;排列组合…