Kotlin学习日志(二)数据类型(上)

简介: Kotlin学习日志(二)数据类型(上)

一、基本数据类型


Kotlin的基本数据类型和其他高级语言得分类一样,包括整型、长整型、浮点型、双精度、布尔类型、字符型、字符串这几种常见类型,这样说可能过于抽象,那就和java中的基础数据类型来对比一下吧1665290516638.png

这样就很立体了吧,请注意小写和大写的区别,Java中严格区分大小写的。


1.1变量声明


接下来声明一个变量了,


Java的写法如下:

int i = 0;


Kotlin的写法如下:

var i:Int = 0


解释:上面的 var 表示后面是一个变量声明语句,后面是“变量名:变量类型”的格式声明,不同于Java中常见的“变量类型:变量名”这种格式,(PS:这个在刚开始接触Kotlin的时候很容易搞混,用久了就可以了),后面是没有分号的,Java则有,在Kotlin中如果你后面还有其他语句的话则要加上分号,如果无其他语句则回车换行就行,不需要加分号,如下图所示:


20200214174531986.png


1.2变量转换


Kotlin中进行数据转换和Java中不同,就不一一对比了,直接说Kotlin中如何进行数据类型转换,Kotlin中都是使用类型转换函数来进行数据类型转换的,让我们来认识一下,如下表


Kotlin的数据类型转换函数 转换函数说明
toInt 转换为整型
toLong 转换为长整型
toFloat 转换为浮点数
toDouble 转换为双精度数
toChar 转换为字符
toString 转换为字符串



接下来我们用代码来演示一下:


修改一下布局文件如下


activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:layout_marginTop="20dp"
        android:id="@+id/tv_data"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <Button
        android:layout_marginTop="20dp"
        android:id="@+id/btn_toInt"
        android:text="转换为整型"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <Button
        android:layout_marginTop="20dp"
        android:id="@+id/btn_toLong"
        android:text="转换为长整型"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <Button
        android:layout_marginTop="20dp"
        android:id="@+id/btn_toDouble"
        android:text="转换为双精度数"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <Button
        android:layout_marginTop="20dp"
        android:id="@+id/btn_toChar"
        android:text="转换为字符"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>


然后是MainActivity.kt代码


package com.llw.kotlinstart
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val data:Float = 65.0f
        tv_data.text = data.toString()
        //转整数型
        btn_toInt.setOnClickListener {
            var dataInt:Int = data.toInt()
            tv_data.text = dataInt.toString()
        }
        //转长整数型
        btn_toLong.setOnClickListener {
            var dataLong:Long = data.toLong()
            tv_data.text = dataLong.toString()
        }
        //转双精度数
        btn_toDouble.setOnClickListener {
            var dataDouble:Double = data.toDouble()
            tv_data.text = dataDouble.toString()
        }
        //转字符
        btn_toChar.setOnClickListener {
            var dataChar:Char = data.toChar()
            tv_data.text = dataChar.toString()
        }
    }
}


上面的代码是比较好理解的,一开始我们定义了一个val data:Float

这里的val相当于Java的final,然后赋值给TextView显示出来,接下来点击Button按钮来转换data的值,不同的按钮对应不同的值。


二、数组


说到数组,我们首先看一下Java中的声明数组并初始化


int[] int_array = new int[] {1,2,3};


然后是Kotlin中声明数组并初始化


var int_array:IntArray = intArrayOf(1,2,3)


者对比,对于同一整型数组的声明,Kotlin 与 Java之间有以下区别:


(1) Kotlin另外提供了新的整型数组类型,即IntArray。


(2) 分配一个常量数组,Kotlin调用的是 intArrayOf 方法,并不使用new关键字


下面用一个表格来详细说明Kotlin的数组类型及初始化方法


1665290734974.png


下面是这些基本类型数组的初始化例子:


var int_array:IntArray = intArrayOf(1,2,3)
        var long_array:LongArray = longArrayOf(1,2,3)
        var float_array:FloatArray = floatArrayOf(1.0f,2.0f,3.0f)
        var double_array:DoubleArray = doubleArrayOf(1.0,2.0,3.0)
        var boolean_array:BooleanArray = booleanArrayOf(false,true,false)
        var char_array:CharArray = charArrayOf('A','B','C')


我们是不是少了一个数据类型呢,对了就是字符串数组,这个和在Java中是不一样的,Kotlin中不存在名为StringArray的数组类型,因为String是一种特殊的基本数据类型,要想在Kotlin中声明字符串数组,得使用Array<String>类型,同时,分配字符串数组的方法也变成了arrayOf,下面是Kotlin中声明字符串数组的代码示例

var string_array:Array<String> = arrayOf("One","Two","Three")


这个方式就和Java的代码比较相像了,既然字符串数组可以这样写,那个其他的数据类型同样可以这么写,如下所示:

var int_array:Array<Int> = arrayOf(1,2,3)
        var long_array:Array<Long> = arrayOf(1,2,3)
        var float_array:Array<Float> = arrayOf(1.0f,2.0f,3.0f)
        var double_array:Array<Double> = arrayOf(1.0,2.0,3.0)
        var boolean_array:Array<Boolean> = arrayOf(false,true,false)
        var char_array:Array<Char> = arrayOf('A','B','C')


了解了数组的声明与初始化,接下来就是操作这个数组了,


2.1数组元素的操作


对于数组的操作,常见的处理包括获取数组的长度、获取指定位置的数组元素,这些操作在Kotlin与Java中是有区别的,如下:


(1)获取数组长度,Java使用**.length**,Kotlin使用**.size**(PS:前面有一个点)


(2)获取指定位置的数组元素,Java通过方括号加下标来获取,比如“


string_array[2]”(PS:获取该数组的第三个元素,下标是从0开始的),Kotlin也能通过方括号加下标来获取指定元素,不过Kotlin还有get和set两个方法,通过get方法获取元素值,通过set方法修改元素值,我们演示一下,代码如下:


布局文件


activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:layout_marginTop="20dp"
        android:id="@+id/tv_item"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <Button
        android:layout_marginTop="20dp"
        android:id="@+id/btn_string"
        android:text="测试"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>


MainActivity.kt


package com.llw.kotlinstart
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        //声明字符串数组
        var string_array:Array<String> = arrayOf("Day","Day","Up")
        btn_string.setOnClickListener {
            var str:String = ""
            var i:Int = 0
            while (i<string_array.size){
                //数组元素通过下标访问
//                str = str + string_array[i] + ","
                //数组元素通过get方法访问
                str = str + string_array.get(i) + ","
                i++
            }
            tv_item.text = str
        }
    }
}


运行效果图如下


20200219113617806.png


代码也比较简单,说明一下,先声明一个字符串数组,在点击按钮的代码中,声明一个String变量,一个Int变量,并初始化,然后使用while循环,判断String数组的长度大于变量 i,当条件不满足时跳出循环,并显示最终结果在TextView上,循环中的逻辑也比较简单,取出i对应的数组元素,赋值给str,并用逗号隔开,取出的方式可以自选其一,这里就不过多的赘述了,赋值完成之后,i++,这是i就变成1,然后取数组中第二个值,再加一,变成2,取第三个值,再加一,变成3,3>3?,条件不满足,跳出循环,此时就将数组中的值都取出来了,(PS:我相信有基础的人会觉得我很啰嗦,但是这是必要的,后面会精简的),数组的操作就是这样了。


三、字符串


3.1字符串与基本类型的转换


这里我们对比一下Java的转换方式,如下表:


1665290917351.png


可以看到Kotlin相对于Java的转换要简单一些,通过方法即可实现。


3.2字符串的常用方法


常用方法:查找子串、替换子串、截取指定位置的子串、按特定字符分隔子串等,在这方面Kotlin基本兼容Java的相关方法,


1.查找子串,都调用indexOf方法。


2.截取指定位置子串,都调用substring方法。


3.替换子串,都调用replace方法。


4.按特定字符分隔子串,都调用split方法


下面是查找和截取的使用示例:


布局文件代码


activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <LinearLayout
        android:layout_marginTop="20dp"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:textColor="#000"
            android:text="初始值:"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:textColor="#000"
            android:text="200.56"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv_data"/>
    </LinearLayout>
    <LinearLayout
        android:visibility="gone"
        android:id="@+id/result_lay"
        android:layout_marginTop="20dp"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:textColor="#000"
            android:text="结果值:"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:textColor="#000"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv_result"/>
    </LinearLayout>
    <Button
        android:layout_marginTop="20dp"
        android:id="@+id/btn_substring"
        android:text="截取字符串"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>


MainActivity.kt


package com.llw.kotlinstart
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        //截取小数点之前的字符串
        //1.获取要截取的字符串
        var data:String = tv_data.text.toString()
        //2.声明一个结果值
        var result:String = data
        btn_substring.setOnClickListener {
            //查找目标字符,
            if(result.indexOf('.') > 0){
                //如果有,则截取,substring有两个参数,
                // 分别是startIndex开始位置和endIndex结束位置,从第一个字节开始,到小数点停止,之间的内容
                result = result.substring(0,result.indexOf('.'))
                //结果赋值
                tv_result.text = result
                //控件显示  一开始我隐藏了,所以这个时候显示
                result_lay.visibility = View.VISIBLE
            }
        }
    }
}


运行效果图如下:

20200219144810705.png


20200219144836419.png


代码的解释我都已经写好了,一目了然。


接下来是替换字符串,使用replace方法,如下所示:


我们在布局文件activity_main.xml文件中添加如下代码


<LinearLayout
        android:layout_marginTop="20dp"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:textColor="#000"
            android:text="初始值:"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:textColor="#000"
            android:text="abcabcabcabcabcabc"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv_replace_data"/>
    </LinearLayout>
    <LinearLayout
        android:visibility="gone"
        android:id="@+id/replace_result_lay"
        android:layout_marginTop="20dp"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:textColor="#000"
            android:text="结果值:"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:textColor="#000"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv_replace_result"/>
    </LinearLayout>
    <Button
        android:layout_marginTop="20dp"
        android:id="@+id/btn_replace"
        android:text="替换字符串"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>


在MainActivity.kt中新增如下代码:


//替换字符串
        var replaceData:String = tv_replace_data.text.toString()
        btn_replace.setOnClickListener {
            if(replaceData.indexOf('c') > 0){
                //replace方法也有两个参数,oldChar 要替换的目标字符,newChar替换后的字符,我们把c替换成a
                tv_replace_result.text = replaceData.replace('c','a')
                replace_result_lay.visibility = View.VISIBLE
            }
        }


运行效果如下图所示:


20200219150505910.png


最后我们再写上截取字符串的示例代码


activity_main.xml文件中再加上如下代码


<LinearLayout
        android:layout_marginTop="20dp"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:textColor="#000"
            android:text="初始值:"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:textColor="#000"
            android:text="abc_def_ghi_jkl_mno_pqr"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv_split_data"/>
    </LinearLayout>
    <LinearLayout
        android:visibility="gone"
        android:id="@+id/split_result_lay"
        android:layout_marginTop="20dp"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:textColor="#000"
            android:text="结果值:"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:textColor="#000"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv_split_result"/>
    </LinearLayout>
    <Button
        android:layout_marginTop="20dp"
        android:id="@+id/btn_split"
        android:text="替换字符串"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>



相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
调度
FreeRTOS学习日志 - 第一天
这就是我的FreeRTOS学习日志 - 第一天的内容,明天继续探索这片实时操作系统的广阔海洋。+
254 12
|
安全 IDE Java
Kotlin教程笔记(3) - 空类型和智能类型转换
Kotlin教程笔记(3) - 空类型和智能类型转换
149 1
|
安全 IDE Java
Kotlin教程笔记(3) - 空类型和智能类型转换
Kotlin教程笔记(3) - 空类型和智能类型转换
|
安全 IDE Java
Kotlin教程笔记(3)- 空类型和智能类型转换
本教程详细讲解了Kotlin中的空类型、非空与可空类型、可空类型操作符、安全调用操作符、Elvis运算符、非空断言运算符以及智能类型转换等内容,帮助开发者更好地理解和使用Kotlin的空安全机制。适合希望深入了解Kotlin语法的开发者。快速入门请参考“简洁”系列教程。
181 3
|
Java Kotlin
Kotlin学习教程(七)
《Kotlin学习教程(七)》主要介绍了Lambda表达式,这是一种匿名函数,广泛用于简化代码。文章通过与Java 8 Lambda表达式的对比,展示了Kotlin中Lambda的基本语法、参数声明、函数体定义及如何作为参数传递。示例包括按钮事件处理和字符串比较,突出了Lambda表达式的简洁性和实用性。
185 4
|
Java Kotlin 索引
Kotlin学习教程(三)
Kotlin学习教程(三)
137 4
|
Java Kotlin
Kotlin学习教程(二)
Kotlin学习教程(二)
210 4
|
安全 Java 编译器
Kotlin学习教程(一)
Kotlin学习教程(一)
314 4
|
存储 Java API
Kotlin学习教程(六)
《Kotlin学习教程(六)》介绍了Kotlin中的注解、反射、扩展函数及属性等内容。注解用于添加元数据,反射支持运行时自省,扩展则允许为现有类添加新功能,无需修改原类。本文还详细解释了静态扩展的使用方法,展示了如何通过companion object定义静态部分,并对其进行扩展。
165 2
|
存储 设计模式 JSON
Kotlin学习教程(五)
《Kotlin学习教程(五)》介绍了Kotlin中的泛型、嵌套类、内部类、匿名内部类、枚举、密封类、异常处理、对象、单例、对象表达式、伴生对象、委托等高级特性。具体内容包括泛型的定义和类型擦除、嵌套类和内部类的区别、匿名内部类的创建、枚举类的使用、密封类的声明和用途、异常处理机制、对象和单例的实现、对象表达式的应用、伴生对象的作用以及类委托和属性委托的使用方法。通过这些内容,读者可以深入理解Kotlin的高级特性和设计模式。
176 1