zoukankan      html  css  js  c++  java
  • Scala学习笔记(1)-基本类型归纳

    1.小试牛刀

    使用Scala自带的REPL shell(Read Evaluate Print Loop)学习和尝试Scala语言库,创建的变量在会话期间都是有效的。

    Ctrl+D可退出REPL shell

    实验1:

    scala> println("hello world")
    hello world

    scala> 5*7
    res1: Int = 35

    scala> 2* res1
    res2: Int = 70

    2.处理数据中的字面量、值、变量和类型

    字面量:直接在源代码中出现的数据,如字母A数字3文本"Hello world"

    值:不可变的有类型的存储单元,不允许重新赋值。val <name>:<type>=<literal>

    变量:可变的 有类型的存储单元

    类型:对数据的定义或分类

    注意:Scala中一些变量或值不在使用由Java虚拟机的垃圾回收系统自动撤销其中的数据,不能手动撤销,也不需要这么做。

    实验2:

    2.1值的操作:

    scala> val x: Int =5
    x: Int = 5

    scala> x
    res0: Int = 5

    scala> x*2
    res1: Int = 10

    scala> x/2
    res3: Int = 2

    scala> res0*res1
    res4: Int = 50

    ------------------

    scala> val greeting:String ="Hello world"
    greeting: String = Hello world

    scala> val atSysout='@'
    atSysout: Char = @

    错误的写法

    scala> val x:Int="Hello"
    <console>:11: error: type mismatch;
    found : String("Hello")
    required: Int
    val x:Int="Hello"

    2.2变量的操作:

    Scala中的变量可以指定类型(如下)也可以不指定类型,Scala会根据使用的类型来推断变量正确的类型。

    scala> var a:Double =2.72
    a: Double = 2.72

    scala> a=255.0/133/0
    a: Double = Infinity

    scala> a=5
    a: Double = 5.0

    scala> var b="string"
    b: String = string

    scala> b="opp"
    b: String = opp

    尽管可以重新赋值,但是不能赋值类型不兼容的情况

    scala> var x=5
    x: Int = 5

    scala> x="string"
    <console>:12: error: type mismatch;
    found : String("string")
    required: Int
    x="string"

    2.3 命名

     scala采用驼峰命名法,首字母小写,后面一些列字母采用大写形式

     #字母开头,后面可以使数字字母的组合,也可以使用下划线链接。

     #反引号可以将任意不合法的字符做原样输出。

    scala> val a.b=23
    <console>:12: error: value b is not a member of Double
    val a.b=23
    ^

    scala> val `a.b`=4   #正确的方式
    a.b: Int = 4

    2.4 类型

    scala的数值类型如下

     Byte : 有符号的整数 1字节(大小)  

     Short:有符号的整数 2字节(大小)

     Int:有符号的整数 4字节(大小)  如5

     Long:有符号的整数 8字节(大小) 如5l,5L(大小写不区分)

     Float:有符号的浮点数 4字节(大小) 如5f,5F(大小写不区分)

     Double:有符号的浮点数 8字节(大小)  如5.0 默认为无修饰(前缀和后缀)的小数前面是Double类型

    注:以0x前缀开头的是16进制表示

    scala> val aInt=5
    aInt: Int = 5

    scala> val yellow=0xffff00
    yellow: Int = 16776960

    scala> val id=100L
    id: Long = 100

    scala> val pi=3.1415
    pi: Double = 3.1415

    scala支持不同等级的数值类型的转换,低等级可转化为高等级

           如果高等级转化为低等级使用toType方法手动转化,所有类型都有这个方法

    scala> val l:Long=20
    l: Long = 20

    scala> val i:Int =l
    <console>:12: error: type mismatch;
    found : Long
    required: Int
    val i:Int =l

    scala> val i:Int=l.toInt
    i: Int = 20

    3.字符串

      直接由双引号声明,可以添加转义字符,可采用+链接字符串,可使用==判断字符串值是否相等,使用三个双引号代表原样输出

      scala> val hello="Hello you"

    hello: String = Hello you

    scala> val sinature="with regard, Your friends"
    sinature: String =
    with regard,
    Your friends

    scala> val greeting="Hello, "+"World"
    greeting: String = Hello, World

    scala> val matched=(greeting== "Hello, World")
    matched: Boolean = true

    scala> val theme="Na "*16+"Batman!"
    theme: String = Na Na Na Na Na Na Na Na Na Na Na Na Na Na Na Na Batman!

    scala> val greeting="""She was a good gril   
    | she said "love you"
    | "Why do that?",he said."""
    greeting: String =
    She was a good gril
    she said "love you"
    "Why do that?",he said.

     字符串内插

    scala> val approx=355/113f
    approx: Float = 3.141593

    scala> println("Pi,using 355/113,is about"+approx+".")
    Pi,using 355/113,is about3.141593.

    使用s前缀,使用$指示外部数据

    scala> println(s"PI,using 355/113,is about $approx.")
    PI,using 355/113,is about 3.141593.

    scala> val item="apple"
    item: String = apple

    如果引用非字符,如算式,或者引用无法与周围的文本区分,就需要选用大括号,如下使用

    scala> s"How do you like them ${item}s?"
    res7: String = How do you like them apples?

    scala> s"How do you like them $item?"
    res8: String = How do you like them apple?

    scala> s"Fish a chips,${"pepper "*3}salt"  //输出三次pepper
    res10: String = Fish a chips,pepper pepper pepper salt

    scala> f"I wrote a new $item%.3s today" //输出小数点后三位,如果是字母输出前三个
    res12: String = I wrote a new app today

    scala> f"Enjoy this $item ${355/113.0}%.5f tims today"//保留5位小数
    res13: String = Enjoy this apple 3.14159 tims today

    4.正则表达式

    由字符和标点符号组成的一个字符串,表示一个搜索模式

    Scala基于java类的jaba.utils.regex.Pattern,通过这个类的javadoc可了解

    几个基本操作如下:

      matches   

      replaceAll

      replaceFirst

    语法:用正则表达式求值

          val <Regex value>(<identifier>)=<input string>

    实验:

    scala> val input ="Enjoying this apple 3.14159 times today"   //给定的字符
    input: String = Enjoying this apple 3.14159 times today

    scala> val pattern=""".* apple ([d.]+) times .*""".r   //捕获的是apple times之间的数字序列和一个点号
    pattern: scala.util.matching.Regex = .* apple ([d.]+) times .*

    scala> val pattern(amountTest)=input   //独特的写法,将要匹配的字符串写在等号后面
    amountTest: String = 3.14159

    scala> val amount =amountTest.toDouble
    amount: Double = 3.14159

    正则表达式补充:

    特别字符描述
    $ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ' ' 或 ' '。要匹配 $ 字符本身,请使用 $。
    ( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。
    * 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。
    + 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。
    . 匹配除换行符 之外的任何单字符。要匹配 . ,请使用 . 。
    [ 标记一个中括号表达式的开始。要匹配 [,请使用 [。
    ? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ?。
    将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。' ' 匹配换行符。序列 '\' 匹配 "",而 '(' 则匹配 "("。
    ^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 ^。
    { 标记限定符表达式的开始。要匹配 {,请使用 {。
    | 指明两项之间的一个选择。要匹配 |,请使用 |。

    ====================================================================================================

    限定字符 6种描述
    * 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
    + 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
    ? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
    {n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
    {n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
    {n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

    ====================================================================================================

    字符描述
    ^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 或 之后的位置匹配。
    $ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 或 之前的位置匹配。
     匹配一个字边界,即字与空格间的位置。
    B 非字边界匹配。

    =====================================================================================================

    5.Scala

  • 相关阅读:
    [APIO2014]序列分割
    [HNOI2008]玩具装箱TOY
    [ZJOI2007]时态同步
    [FJOI2014]最短路径树问题
    [IOI2011]Race
    [国家集训队]聪聪可可
    矩阵加速递推
    Codeforces Round #669 题意及思路
    Codeforces Round #670 题意及思路
    Codeforces Round #671 题意及思路
  • 原文地址:https://www.cnblogs.com/jackchen-Net/p/6624599.html
Copyright © 2011-2022 走看看