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"/>



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1天前
|
XML 缓存 Android开发
Android开发,使用kotlin学习多媒体功能(详细)
Android开发,使用kotlin学习多媒体功能(详细)
105 0
|
1天前
|
存储 Go
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
本文将探讨几个热门的 go 日志库如 logrus、zap 和官网的 slog,我将分析这些库的的关键设计元素,探讨它们是如何支持日志轮转与切割功能的配置。
128 0
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
|
1天前
|
SQL 监控 关系型数据库
【MySQL学习】MySQL的慢查询日志和错误日志
【MySQL学习】MySQL的慢查询日志和错误日志
|
1天前
|
监控 Docker 容器
Docker从入门到精通:Docker log 命令学习
了解 Docker 日志管理对容器监控至关重要。`docker logs` 命令用于查看和管理容器日志,例如,`docker logs &lt;container_name&gt;` 显示容器日志,`-f` 或 `--follow` 实时跟踪日志,`--tail` 显示指定行数,`--timestamps` 添加时间戳,`--since` 按日期筛选。Docker 支持多种日志驱动,如 `syslog`,可通过 `--log-driver` 配置。有效管理日志能提升应用程序的稳定性和可维护性。
17 0
|
1天前
|
SQL 关系型数据库 MySQL
MySQL技能完整学习列表11、日志和备份——1、查看日志——2、数据备份和恢复(mysqldump, mysqlbinlog)
MySQL技能完整学习列表11、日志和备份——1、查看日志——2、数据备份和恢复(mysqldump, mysqlbinlog)
49 0
|
1天前
|
Android开发 Kotlin
android开发,使用kotlin学习Fragment
android开发,使用kotlin学习Fragment
54 0
|
1天前
|
Android开发 Kotlin
android开发,使用kotlin学习WorkManager
android开发,使用kotlin学习WorkManager
54 0
|
1天前
|
缓存 Android开发 数据安全/隐私保护
android开发,使用kotlin学习HTTP访问网络
android开发,使用kotlin学习HTTP访问网络
81 0
|
存储 Java
《Kotlin极简教程》第三章 Kotlin基本数据类型
正式上架:《Kotlin极简教程》Official on shelves: Kotlin Programming minimalist tutorial 京东JD:https://item.jd.com/12181725.html 天猫Tmall:https://detail.tmall.com/item.htm?id=558540170670 在 Kotlin 中,所有东西都是对象:数字、字符、布尔和数组。
943 0
|
1天前
|
移动开发 API Android开发
构建高效Android应用:Kotlin协程的实践指南
【5月更文挑战第11天】 在移动开发领域,性能优化和资源管理是至关重要的。特别地,对于Android开发者来说,合理利用Kotlin协程可以极大地改善应用的响应性和稳定性。本文将深入探讨Kotlin协程在Android中的实际应用,包括它们如何简化异步编程模型、提高UI线程的响应性,以及减少内存消耗。我们将通过具体案例分析,了解如何在实际项目中有效地使用协程,从而帮助开发者构建更加高效的Android应用程序。

热门文章

最新文章