Android Gradle学习系列(三)-核心语法讲解与实战之字符串详解

前言

上一篇我们已经讲解过Groovy的变量,这一篇主要讲解Groovy的字符串

字符串讲解

首先看一下我们的思维导图
在这里插入图片描述
Groovy中字符串分为两种类型,一种是java.lang.String,另一种是groovy.lang.GString.第一种和我们的Java一样就不多少了,主要说下这个GString

常用三种定义方式

第一种:单引号定义

在这里插入图片描述
我们运行下看下结果
在这里插入图片描述
那如果我们想要的字符串中有单引号'怎么办呢?用\'\'包裹起来即可
在这里插入图片描述

我们打印下,看看这个b是不是用单引号包裹起来
在这里插入图片描述
和我们预期的一样,同时我们发现返回的类型都是Java.lang.String,说明单引号这种定义方式和我们Java中的String是一样的

第二种,三个单引号定义

在这里插入图片描述
我们运行下看看结果
在这里插入图片描述

返回类型也是Java.lang.String,那这个和单引号定义方式有啥区别呢?主要就是样式上,这个三个单引号定义的字符串可以指定样式,比如换行,不需要加\n,代码表示上也不需要用+号拼接,我们写个简单的例子
在这里插入图片描述
这里我们看见打印出来的结果就是我们写好的

第三种,双引号定义

我们先写一个简单的
在这里插入图片描述
这里我们发现,返回的依旧是Java.lang.String类型,说明这个和我们JavaString也一样,那都一样搞这么多有必要吗?这个双引号定义的字符串还有一种最主要的功能就是可扩展,上面几种定义的方式,我们这个内容是不可变的,但是我们用过双引号定义的可就不一样了,我们写个例子
在这里插入图片描述
这里我们就可以发现,双引号定义的字符串是可以动态改变的,只需要用${}包裹起来就行,同时它的返回值不再是Java.lang,String,而是org.codehaus.groovy.runtime.GStringImpl,也就是GString,同样是双引号定义的字符串,如果你的里面有这种扩展表达式,使用的就是GString

这个${}里面不仅可以是变量,它可以是任意的表达式,我们写个例子验证下
在这里插入图片描述
既然有StringGString,那么他俩能直接调用吗?还是说必须得强转成一样的才能调用?答案是可以相互直接调用的,我们举个小例子
在这里插入图片描述
这里我们写了个方法echo,返回值是String,入参也是String,这里我们调用这个方法时传入的是doubleName3,我们之前打印过他的类型是GString,也就是说两者是可以相互调用的

新增操作符

首先我们看下思维导图
在这里插入图片描述
虽然String中方法有很多,但是主要来源就三种

java.lang.String、DefaultGroovyMethods、StringGroovyMethods(普通类型的参数、闭包类型的参数)

  • Java.lang.String

这里边的方法我们基本上就不用学习了,我们在Java中使用的比较多了

  • DefaultGroovyMethods

这里面的方法我们也不用太关心,因为StringGroovyMethods继承自DefaultGroovyMethods,也基本都重写了其中的方法

  • StringGroovyMethods

这个就是我们最主要关心的了,这一篇我们主要讲解普通类型参数的方法,至于闭包类型参数我们会在后面闭包实战中讲解
我们打开我们的IDEA,找到StringGroovyMethods这个类,我们会发现里面有许许多多的方法,我们只能是挑选常用的来讲解下,剩下的用到的时候在说

center方法

public static String center(CharSequence self, Number numberOfChars) {
        return center((CharSequence)self, numberOfChars, (CharSequence)" ");
    }

    public static String center(CharSequence self, Number numberOfChars, CharSequence padding) {
        int numChars = numberOfChars.intValue();
        if (numChars <= self.length()) {
            return self.toString();
        } else {
            int charsToAdd = numChars - self.length();
            String semiPad = charsToAdd % 2 == 1 ? getPadding(padding, charsToAdd / 2 + 1) : getPadding(padding, charsToAdd / 2);
            return charsToAdd % 2 == 0 ? semiPad + self + semiPad : semiPad.substring(0, charsToAdd / 2) + self + semiPad;
        }
    }

center方法有两个,一个是一个参数的,一个是两个参数的.第一个参数表示我们新字符串的长度是多少,第二个参数表示我们想用那个字符填充,如果不传的话默认就是空格,使用第二个参数对已有字符串两边进行填充

我们写个例子验证下

在这里插入图片描述
我们打印了三个:第一个是新字符串长度为10,默认是空格填充;第二个是新字符串长度为4,用d填充,但是发现根本每生效,也就是说第一个参数如果比我们原来的字符串长度小,那么就不生效;第三个是新字符串长度为10,用m填充

padLeft方法

   public static String padLeft(CharSequence self, Number numberOfChars) {
        return padLeft((CharSequence)self, numberOfChars, (CharSequence)" ");
    }

    public static String padLeft(CharSequence self, Number numberOfChars, CharSequence padding) {
        int numChars = numberOfChars.intValue();
        return numChars <= self.length() ? self.toString() : getPadding(padding.toString(), numChars - self.length()) + self;
    }

padLeft方法有两个,一个是一个参数的,一个是两个参数的.第一个参数表示我们新字符串的长度是多少,第二个参数表示我们想用那个字符填充,如果不传的话默认就是空格,使用第二个参数对已有字符串左边进行填充

我们写个例子验证下

在这里插入图片描述

比较

Groovy中比较字符串可以直接使用>、<符号来直接比较,而不需要使用compareTo()
在这里插入图片描述

取值

Groovy中获取字符串某个位置的字符直接使用string[index],相当于string.getAt(index),这个[]里面的index可以是一个具体的数字,也可以是一个范围,用..连接,包括起点和终点

在这里插入图片描述

减法

Groovy中减去字符串:可以直接使用-号,效果与Java中的minus()一样
在这里插入图片描述
我们发现如果前面的字符串不包括后面的,那么结果就是前面的字符串

倒序

在这里插入图片描述

首字母大写

在这里插入图片描述

是否是数字

在这里插入图片描述

OK,我们呢这里主要就有讲解这些,还有很多那就需要我们在使用过程中查看api了

新增API讲解

逻辑控制:顺序逻辑(单步往下执行)、条件逻辑(if/else、switch/case)、循环逻辑(while、for)

在这里插入图片描述

条件逻辑

Groovy中的switch/caseJava还是有点不同的.Java中的switch只支持固定的几种类型,但是Groovy中的switch是支持任意类型的,所以说基本上switch是可以代替if/else
我们写个例子验证下
在这里插入图片描述
我们可以看见我们的case有字符串,列表,Integer,BigDecimal等,这里就写几个示范下Groovyswitch支持任意类型
我们看下结果
在这里插入图片描述
和我们预期的完全一样

循环逻辑

  • 第一种,对范围的for循环
    在这里插入图片描述
  • 第二种,对List的循环

在这里插入图片描述

  • 第三种,对map的循环
    在这里插入图片描述
    Map循环这里比Java要便捷,不需要获取迭代器,就能获取相应的keyvalue
发布了87 篇原创文章 · 获赞 319 · 访问量 149万+

猜你喜欢

转载自blog.csdn.net/Greathfs/article/details/102885030