StringUtils常用方法+StringUtils详细介绍

2024-01-14 03:38

本文主要是介绍StringUtils常用方法+StringUtils详细介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

StringUtils用法+StringUtils详细介绍
public static void StringUtil(){
    //null 和 ""操作~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //判断是否Null 或者 ""
    //System.out.println(StringUtils.isEmpty(null));
    //System.out.println(StringUtils.isNotEmpty(null));
    //判断是否null 或者 "" 去空格~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //System.out.println(StringUtils.isBlank("  "));
    //System.out.println(StringUtils.isNotBlank(null));
    //去空格.Null返回null~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //System.out.println(StringUtils.trim(null));
    //去空格,将Null和"" 转换为Null
    //System.out.println(StringUtils.trimToNull(""));
    //去空格,将NULL 和 "" 转换为""
    //System.out.println(StringUtils.trimToEmpty(null));
    //可能是对特殊空格符号去除??
    //System.out.println(StringUtils.strip("大家好  啊  \t"));
    //同上,将""和null转换为Null
    //System.out.println(StringUtils.stripToNull(" \t"));
    //同上,将""和null转换为""
    //System.out.println(StringUtils.stripToEmpty(null));
    //将""或者Null 转换为 ""
    //System.out.println(StringUtils.defaultString(null));
    //仅当字符串为Null时 转换为指定的字符串(二参数)
    //System.out.println(StringUtils.defaultString("", "df"));
    //当字符串为null或者""时,转换为指定的字符串(二参数)
    //System.out.println(StringUtils.defaultIfEmpty(null, "sos"));
    //去空格.去字符~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //如果第二个参数为null去空格(否则去掉字符串2边一样的字符,到不一样为止)
    //System.out.println(StringUtils.strip("fsfsdf", "f"));
    //如果第二个参数为null只去前面空格(否则去掉字符串前面一样的字符,到不一样为止)
    //System.out.println(StringUtils.stripStart("ddsuuu ", "d"));
    //如果第二个参数为null只去后面空格,(否则去掉字符串后面一样的字符,到不一样为止)
    //System.out.println(StringUtils.stripEnd("dabads", "das"));
    //对数组没个字符串进行去空格。
    //ArrayToList(StringUtils.stripAll(new String[]{" 中华 ", "民 国 ", "共和 "}));
    //如果第二个参数为null.对数组每个字符串进行去空格。(否则去掉数组每个元素开始和结尾一样的字符)
    //ArrayToList(StringUtils.stripAll(new String[]{" 中华 ", "民 国", "国共和国"}, "国"));
    //查找,判断~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //判断2个字符串是否相等相等,Null也相等
    //System.out.println(StringUtils.equals(null, null));
    //不区分大小写比较
    //System.out.println(StringUtils.equalsIgnoreCase("abc", "ABc"));
    //查找,不知道怎么弄这么多查找,很多不知道区别在哪?费劲~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //普通查找字符,如果一参数为null或者""返回-1
    //System.out.println(StringUtils.indexOf(null, "a"));
    //从指定位置(三参数)开始查找,本例从第2个字符开始查找k字符
    //System.out.println(StringUtils.indexOf("akfekcd中华", "k", 2));
    //未发现不同之处
    //System.out.println(StringUtils.ordinalIndexOf("akfekcd中华", "k", 2));
    //查找,不区分大小写
    //System.out.println(StringUtils.indexOfIgnoreCase("adfs", "D"));
    //从指定位置(三参数)开始查找,不区分大小写
    //System.out.println(StringUtils.indexOfIgnoreCase("adfs", "a", 3));
    //从后往前查找
    //System.out.println(StringUtils.lastIndexOf("adfas", "a"));
    //未理解,此结果为2
    //System.out.println(StringUtils.lastIndexOf("d饿abasdafs我", "a", 3));
    //未解,此结果为-1
    //System.out.println(StringUtils.lastOrdinalIndexOf("yksdfdht", "f", 2));
    //从后往前查,不区分大小写
    //System.out.println(StringUtils.lastIndexOfIgnoreCase("sdffet", "E"));
    //未解,此结果为1
    //System.out.println(StringUtils.lastIndexOfIgnoreCase("efefrfs看", "F" , 2));
    //检查是否查到,返回boolean,null返回假
    //System.out.println(StringUtils.contains("sdf", "dg"));
    //检查是否查到,返回boolean,null返回假,不区分大小写
    //System.out.println(StringUtils.containsIgnoreCase("sdf", "D"));
    //检查是否有含有空格,返回boolean
    //System.out.println(StringUtils.containsWhitespace(" d"));
    //查询字符串跟数组任一元素相同的第一次相同的位置
    //System.out.println(StringUtils.indexOfAny("absfekf", new String[]{"f", "b"}));
    //查询字符串中指定字符串(参数二)出现的次数
    //System.out.println(StringUtils.indexOfAny("afefes", "e"));
    //查找字符串中是否有字符数组中相同的字符,返回boolean
    //System.out.println(StringUtils.containsAny("asfsd", new char[]{'k', 'e', 's'}));
    //未理解与lastIndexOf不同之处。是否查到,返回boolean
    //System.out.println(StringUtils.containsAny("啡f咖啡", "咖"));
    //未解
    //System.out.println(StringUtils.indexOfAnyBut("seefaff", "af"));
    //判断字符串中所有字符,都是出自参数二中。
    //System.out.println(StringUtils.containsOnly("中华华", "华"));
    //判断字符串中所有字符,都是出自参数二的数组中。
    //System.out.println(StringUtils.containsOnly("中华中", new char[]{'中', '华'}));
    //判断字符串中所有字符,都不在参数二中。
    //System.out.println(StringUtils.containsNone("中华华", "国"));
    //判断字符串中所有字符,都不在参数二的数组中。
    //System.out.println(StringUtils.containsNone("中华中", new char[]{'中', '达人'}));
    //从后往前查找字符串中与字符数组中相同的元素第一次出现的位置。本例为4
    //System.out.println(StringUtils.lastIndexOfAny("中国人民共和国", new String[]{"国人", "共和"}));
    //未发现与indexOfAny不同之处  查询字符串中指定字符串(参数二)出现的次数
    //System.out.println(StringUtils.countMatches("中国人民共和中国", "中国"));
    //检查是否CharSequence的只包含Unicode的字母。空将返回false。一个空的CharSequence(长()= 0)将返回true
    //System.out.println(StringUtils.isAlpha("这是干什么的2"));
    //检查是否只包含Unicode的CharSequence的字母和空格('')。空将返回一个空的CharSequence假(长()= 0)将返回true。
    //System.out.println(StringUtils.isAlphaSpace("NBA直播 "));
    //检查是否只包含Unicode的CharSequence的字母或数字。空将返回false。一个空的CharSequence(长()= 0)将返回true。
    //System.out.println(StringUtils.isAlphanumeric("NBA直播"));
    //如果检查的Unicode CharSequence的只包含字母,数字或空格('')。空将返回false。一个空的CharSequence(长()= 0)将返回true。
    //System.out.println(StringUtils.isAlphanumericSpace("NBA直播"));
    //检查是否只包含ASCII可CharSequence的字符。空将返回false。一个空的CharSequence(长()= 0)将返回true。
    //System.out.println(StringUtils.isAsciiPrintable("NBA直播"));
    //检查是否只包含数值。
    //System.out.println(StringUtils.isNumeric("NBA直播"));
    //检查是否只包含数值或者空格
    //System.out.println(StringUtils.isNumericSpace("33 545"));
    //检查是否只是空格或""。
    //System.out.println(StringUtils.isWhitespace(" "));
    //检查是否全是英文小写。
    //System.out.println(StringUtils.isAllLowerCase("kjk33"));
    //检查是否全是英文大写。
    //System.out.println(StringUtils.isAllUpperCase("KJKJ"));

    //交集操作~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //去掉参数2字符串中在参数一中开头部分共有的部分,结果为:人民共和加油
    //System.out.println(StringUtils.difference("中国加油", "中国人民共和加油"));
    //统计2个字符串开始部分共有的字符个数
    //System.out.println(StringUtils.indexOfDifference("ww.taobao", "www.taobao.com"));
    //统计数组中各个元素的字符串开始都一样的字符个数
    //System.out.println(StringUtils.indexOfDifference(new String[] {"中国加油", "中国共和", "中国人民"}));
    //取数组每个元素共同的部分字符串
    //System.out.println(StringUtils.getCommonPrefix(new String[] {"中国加油", "中国共和", "中国人民"}));
    //统计参数一中每个字符与参数二中每个字符不同部分的字符个数
    //System.out.println(StringUtils.getLevenshteinDistance("中国共和发国人民", "共和国"));
    //判断开始部分是否与二参数相同
    //System.out.println(StringUtils.startsWith("中国共和国人民", "中国"));
    //判断开始部分是否与二参数相同。不区分大小写
    //System.out.println(StringUtils.startsWithIgnoreCase("中国共和国人民", "中国"));
    //判断字符串开始部分是否与数组中的某一元素相同
    //System.out.println(StringUtils.startsWithAny("abef", new String[]{"ge", "af", "ab"}));
    //判断结尾是否相同
    //System.out.println(StringUtils.endsWith("abcdef", "def"));
    //判断结尾是否相同,不区分大小写
    //System.out.println(StringUtils.endsWithIgnoreCase("abcdef", "Def"));
    //字符串截取~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //截取指定位置的字符,null返回null.""返回""
    //System.out.println(StringUtils.substring("国民党", 2));
    //截取指定区间的字符
    //System.out.println(StringUtils.substring("中国人民共和国", 2, 4));
    //从左截取指定长度的字符串
    //System.out.println(StringUtils.left("说点什么好呢", 3));
    //从右截取指定长度的字符串
    //System.out.println(StringUtils.right("说点什么好呢", 3));
    //从第几个开始截取,三参数表示截取的长度
    //System.out.println(StringUtils.mid("说点什么好呢", 3, 2));
    //截取到等于第二个参数的字符串为止
    //System.out.println(StringUtils.substringBefore("说点什么好呢", "好"));
    //从左往右查到相等的字符开始,保留后边的,不包含等于的字符。本例:什么好呢
    //System.out.println(StringUtils.substringAfter("说点什么好呢", "点"));
    //这个也是截取到相等的字符,但是是从右往左.本例结果:说点什么好
    //System.out.println(StringUtils.substringBeforeLast("说点什么好点呢", "点"));
    //这个截取同上是从右往左。但是保留右边的字符
    //System.out.println(StringUtils.substringAfterLast("说点什么好点呢?", "点"));
    //截取查找到第一次的位置,和第二次的位置中间的字符。如果没找到第二个返回null。本例结果:2010世界杯在
    //System.out.println(StringUtils.substringBetween("南非2010世界杯在南非,在南非", "南非"));
    //返回参数二和参数三中间的字符串,返回数组形式
    //ArrayToList(StringUtils.substringsBetween("[a][b][c]", "[", "]"));
    //分割~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //用空格分割成数组,null为null
    //ArrayToList(StringUtils.split("中华 人民  共和"));
    //以指定字符分割成数组
    //ArrayToList(StringUtils.split("中华 ,人民,共和", ","));
    //以指定字符分割成数组,第三个参数表示分隔成数组的长度,如果为0全体分割
    //ArrayToList(StringUtils.split("中华 :人民:共和", ":", 2));
    //未发现不同的地方,指定字符分割成数组
    //ArrayToList(StringUtils.splitByWholeSeparator("ab-!-cd-!-ef", "-!-"));
    //未发现不同的地方,以指定字符分割成数组,第三个参数表示分隔成数组的长度
    //ArrayToList(StringUtils.splitByWholeSeparator("ab-!-cd-!-ef", "-!-", 2));
    //分割,但" "不会被忽略算一个元素,二参数为null默认为空格分隔
    //ArrayToList(StringUtils.splitByWholeSeparatorPreserveAllTokens(" ab   de fg ", null));
    //同上,分割," "不会被忽略算一个元素。第三个参数代表分割的数组长度。
    //ArrayToList(StringUtils.splitByWholeSeparatorPreserveAllTokens("ab   de fg", null, 3));
    //未发现不同地方,分割
    //ArrayToList(StringUtils.splitPreserveAllTokens(" ab   de fg "));
    //未发现不同地方,指定字符分割成数组
    //ArrayToList(StringUtils.splitPreserveAllTokens(" ab   de fg ", null));
    //未发现不同地方,以指定字符分割成数组,第三个参数表示分隔成数组的长度
    //ArrayToList(StringUtils.splitPreserveAllTokens(" ab   de fg ", null, 2));
    //以不同类型进行分隔
    //ArrayToList(StringUtils.splitByCharacterType("AEkjKr i39:。中文"));
    //未解
    //ArrayToList(StringUtils.splitByCharacterTypeCamelCase("ASFSRules234"));
    //拼接~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //将数组转换为字符串形式
    //System.out.println(StringUtils.concat(getArrayData()));
    //拼接时用参数一得字符相连接.注意null也用连接符连接了
    //System.out.println(StringUtils.concatWith(",", getArrayData()));
    //也是拼接。未发现区别
    //System.out.println(StringUtils.join(getArrayData()));
    //用连接符拼接,为发现区别
    //System.out.println(StringUtils.join(getArrayData(), ":"));
    //拼接指定数组下标的开始(三参数)和结束(四参数,不包含)的中间这些元素,用连接符连接
    //System.out.println(StringUtils.join(getArrayData(), ":", 1, 3));
    //用于集合连接字符串.用于集合
    //System.out.println(StringUtils.join(getListData(), ":"));
    //移除,删除~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //删除所有空格符
    //System.out.println(StringUtils.deleteWhitespace(" s 中 你 4j"));
    //移除开始部分的相同的字符
    //System.out.println(StringUtils.removeStart("www.baidu.com", "www."));
    //移除开始部分的相同的字符,不区分大小写
    //System.out.println(StringUtils.removeStartIgnoreCase("www.baidu.com", "WWW"));
    //移除后面相同的部分
    //System.out.println(StringUtils.removeEnd("www.baidu.com", ".com"));
    //移除后面相同的部分,不区分大小写
    //System.out.println(StringUtils.removeEndIgnoreCase("www.baidu.com", ".COM"));
    //移除所有相同的部分
    //System.out.println(StringUtils.remove("www.baidu.com/baidu", "bai"));
    //移除结尾字符为"\n", "\r", 或者 "\r\n".
    //System.out.println(StringUtils.chomp("abcrabc\r"));
    //也是移除,未解。去结尾相同字符
    //System.out.println(StringUtils.chomp("baidu.com", "com"));
    //去掉末尾最后一个字符.如果是"\n", "\r", 或者 "\r\n"也去除
    //System.out.println(StringUtils.chop("wwe.baidu"));

    //替换~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //替换指定的字符,只替换第一次出现的
    //System.out.println(StringUtils.replaceOnce("www.baidu.com/baidu", "baidu", "hao123"));
    //替换所有出现过的字符
    //System.out.println(StringUtils.replace("www.baidu.com/baidu", "baidu", "hao123"));
    //也是替换,最后一个参数表示替换几个
    //System.out.println(StringUtils.replace("www.baidu.com/baidu", "baidu", "hao123", 1));
    //这个有意识,二三参数对应的数组,查找二参数数组一样的值,替换三参数对应数组的值。本例:baidu替换为taobao。com替换为net
    //System.out.println(StringUtils.replaceEach("www.baidu.com/baidu", new String[]{"baidu", "com"}, new String[]{"taobao", "net"}));
    //同上,未发现不同
    //System.out.println(StringUtils.replaceEachRepeatedly("www.baidu.com/baidu", new String[]{"baidu", "com"}, new String[]{"taobao", "net"}));
    //这个更好,不是数组对应,是字符串参数二和参数三对应替换.(二三参数不对应的话,自己看后果)
    //System.out.println(StringUtils.replaceChars("www.baidu.com", "bdm", "qo"));
    //替换指定开始(参数三)和结束(参数四)中间的所有字符
    //System.out.println(StringUtils.overlay("www.baidu.com", "hao123", 4, 9));
    //添加,增加~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //复制参数一的字符串,参数二为复制的次数
    //System.out.println(StringUtils.repeat("ba", 3));
    //复制参数一的字符串,参数三为复制的次数。参数二为复制字符串中间的连接字符串
    //System.out.println(StringUtils.repeat("ab", "ou", 3));
    //如何字符串长度小于参数二的值,末尾加空格补全。(小于字符串长度不处理返回)
    //System.out.println(StringUtils.rightPad("海川", 4));
    //字符串长度小于二参数,末尾用参数三补上,多于的截取(截取补上的字符串)
    //System.out.println(StringUtils.rightPad("海川", 4, "河流啊"));
    //同上在前面补全空格
    //System.out.println(StringUtils.leftPad("海川", 4));
    //字符串长度小于二参数,前面用参数三补上,多于的截取(截取补上的字符串)
    //System.out.println(StringUtils.leftPad("海川", 4, "大家好"));
    //字符串长度小于二参数。在两侧用空格平均补全(测试后面补空格优先)
    //System.out.println(StringUtils.center("海川", 3));
    //字符串长度小于二参数。在两侧用三参数的字符串平均补全(测试后面补空格优先)
    //System.out.println(StringUtils.center("海川", 5, "流"));
    //只显示指定数量(二参数)的字符,后面以三个点补充(参数一截取+三个点=二参数)
    //System.out.println(StringUtils.abbreviate("中华人民共和国", 5));
    //2头加点这个有点乱。本例结果: ...ijklmno
    //System.out.println(StringUtils.abbreviate("abcdefghijklmno", 12, 10));
    //保留指定长度,最后一个字符前加点.本例结果: ab.f
    //System.out.println(StringUtils.abbreviateMiddle("abcdef", ".", 4));
    //转换,刷选~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //转换第一个字符为大写.如何第一个字符是大写原始返回
    //System.out.println(StringUtils.capitalize("Ddf"));
    //转换第一个字符为大写.如何第一个字符是大写原始返回
    //System.out.println(StringUtils.uncapitalize("DTf"));
    //反向转换,大写变小写,小写变大写
    //System.out.println(StringUtils.swapCase("I am Jiang, Hello"));
    //将字符串倒序排列
    //System.out.println(StringUtils.reverse("中国人民"));
    //根据特定字符(二参数)分隔进行反转
    //System.out.println(StringUtils.reverseDelimited("中:国:人民", ':'));
}

//将数组转换为List
private static void ArrayToList(String[] str){
    System.out.println(Arrays.asList(str) + " 长度:" + str.length);
}

//获得集合数据
private static List getListData(){
    List list = new ArrayList();
    list.add("你好");
    list.add(null);
    list.add("他好");
    list.add("大家好");
    return list;
}

//获得数组数据 
private static String[] getArrayData(){
    return (String[]) getListData().toArray(new String[0]);
}

public static void main(String[] args) {
    StringUtil();
}

这篇关于StringUtils常用方法+StringUtils详细介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/603806

相关文章

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Windows 上如果忘记了 MySQL 密码 重置密码的两种方法

《Windows上如果忘记了MySQL密码重置密码的两种方法》:本文主要介绍Windows上如果忘记了MySQL密码重置密码的两种方法,本文通过两种方法结合实例代码给大家介绍的非常详细,感... 目录方法 1:以跳过权限验证模式启动 mysql 并重置密码方法 2:使用 my.ini 文件的临时配置在 Wi

MySQL重复数据处理的七种高效方法

《MySQL重复数据处理的七种高效方法》你是不是也曾遇到过这样的烦恼:明明系统测试时一切正常,上线后却频频出现重复数据,大批量导数据时,总有那么几条不听话的记录导致整个事务莫名回滚,今天,我就跟大家分... 目录1. 重复数据插入问题分析1.1 问题本质1.2 常见场景图2. 基础解决方案:使用异常捕获3.

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中