【Java】字符串String类:总结

声明定义一个String对象:

String mString="你好,世界!";

C语言说明:
java中,不再有指针的概念,却有指针的身影,因为java中有一个概念叫做“引用”(但是请注意,普通数据类型创建的变量不是引用类型),C++也有。这个“引用”实际就是宏观上的指针!所以这里的对象“mString”你可以看成一个指针变量(如果你有C基础的话),然后上面的赋值语句,就是把字符串“你好,世界!”的首地址赋值给了指针变量"mString".

控制台输入字符串:

Scanner mScanner = new Scanner(System.in);
String a=mScanner.next()或者mScanner.nextLine()

使用指南:注意,next()和nextLine()方法都是返回字符串,都是用来读取字符串的,
第一个方法表示你输入空格符或者回车(换行符)都能停止输入,
但第二个必须输入回车(换行符)才停止。

但是注意区别:“停止输入”和“函数执行停止”是两个完全不同的概念!有些小伙伴在使用next()时,输入键盘上的空格按键,发现根本就不会跳过next()这条语句而去执行下一条语句,这是因为next()还没结束,只是不再接收你的输入了而已,仍然需要你按下回车键让next()函数结束呢!简而言之,就是人家还活着,只是跟你断绝了联系。

下面几个才是读取数值型数据:
nextInt():将读取的字符串转化为int型
nextFloat():将读取的字符串转化为float型
nextDouble():…等
上面这些方法又分为两大门派:nextLine()自成一派,其他(以next()为首)合成另一派

此处有易错提醒:千万别在使用next()这一派后使用nextLine()!否则读取结果可能会有惊喜。
原因:
以next()为首的那一派输入(请注意:此处所说的输入和读取描述的是同一个动作的两个过程,从键盘输入到控制台,从控制台读取到内存中的变量,姑且认为:读取=输入)的终止标记是【空白符】——即一个空格字符‘ ’,一个特殊的转义字符\n或\r或\t等。
nextLine()的一派却只以【换行符】 \n或\r(Linux下只有\n)为终止信号。
所以当你使用next()等以后,按下回车键,这个回车键就会停留在缓存中,并且可以被下一个nextLine()读入,这是nextLIne就相当于直接终止,而读不进你后面输入的字符串了。

这时候你可能会有一个疑问:为什么在nextLine()后面使用next()就没事了呢,nextLine()使用时留下的换行符不也会影响到next()的输入吗?在此不做解释,你就当作这是nextLine()的一个特性,比较人家自成一派很不容易,就给人家一点特权吧!

就比如下面这个例子,输入“你好”,然后回车,就直接跳过nextLine()这条语句从而执行最下面的打印语句了。
在这里插入图片描述

如果你只需要读取一个字符,可以先用next()等方法先读取字符串,再用下面我即将讲的charAt(0)方法获取第一个字符。

求长度:

String对象.length()

求某个字符:

String对象.charAt(下标)

后面连接另一个字符串:

String对象.concat(另一个字符串)

全部大/小写:

String对象.toUpperCase()
String对象.toLowerCase()

去掉两边看不到的字符

String对象.trim()
如:特殊的转义字符\n,\t,\f等,和长度为一个字符的空格’ ',如果他们在整个字符串的两边,将会被去掉。

比较字符串的内容是否(true/fault)相等同:

String对象.equals(需要比较的另一个字符串)
String对象.equalsIgnoreCase(需要比较的另一个字符串):忽略大小写

这里可能会有同学问:直接用对象str1==对象str2去判断不就行了吗。不行!前面我们讲了这个的String对象是引用类型,也就是相当于指针,指针形象化就是地址,所以你这个语句只能判断这两个指针指向的是不是同一个地址,假设两个地址都装了同一样的东西,你就判断不出来了吧。而这里的equals就是帮你解决这种问题的!

更精确的比较比较字符串的内容相等情况:

String对象.compareTo(需要比较的另一个字符串)
String对象.compareToIgnoreCase(需要比较的另一个字符串):不区分大小写
前>后:返回大于0的整数
前==后:返回0
前<后:返回小于0的数

检查字符串是否以某个字符(串)开始/结束:

String对象.startsWith(某个前缀字符串)
String对象.endsWith(某个后缀)

检查字符串之间是否有包含关系(子集)

String对象.contains(子集):该“子集”确实是子集,返回true

获取字符串的子串(子集):

String对象.substring(开始截取的下标):结束默认为字符串末尾
String对象.substring(开始截取的下标,结束截取的下标+1):更精确截取

这里可能又有人迷惑和易错了,为什么不直接是“结束截取的下标”,而偏偏要加1,这你就需要问该函数的开发者,你可以这样理解:一般你写for循环遍历数组的时候,是不是曾经这样写过:for(int i=0;i<10;i++),代码中出现了“10”这个数字,但是数组的下标最高只能到达9。所以你懂我意思吧,10只是字符串(即数组)的长度,而不是下标的最大值。

返回某个字符(串)第一次出现的下标:

如果没有匹配的,返回-1

String对象.indexOf(某个字符/字符串):默认从0——>数组长度-1
String对象.indexOf(某个字符/字符串,从哪个下标往后):从指定下标——>数组长度-1

返回某个字符(串)最后一次出现的下标:

如果没有匹配的,返回-1

String对象.lastIndexOf(某个字符/字符串):默认从0——>数组长度-1
String对象.lastIndexOf(某个字符/字符串,从哪个下标往后):从指定下标——>数组长度-1

以某个字符(串)分割字符串:

注意它的返回值,它的返回值是一个字符串数组,而不是一个字符串。这很好理解啊,你拿刀切一根香肠,最后肯定变成很多根香肠啦!
在这里插入图片描述
它的另一个重载函数就不讲理,因为(我)不常用。
另外还有一小部分,相信学完前面以后,你均可以见名知意。在这里插入图片描述

数值——>字符串:加双引号即可!

int number=123456;
String strNumber=number+"";
当然,可能还可以使用object类的toString()方法。

字符串——>数值:

String strNumber=123456;
int number=Integer.parseInt(strNumber);

注意:这里不再是使用String的实例方法,而是使用Integer的静态方法。其实,解析(parse)这个词用得比较专业,所以可能很多人没看懂这个方法名所表达的意思,就是把字符串解析,解析的结果是整型。
类似的,double number=Double.parseDouble(strNumber);
float number=Float.parseFloat();

注意:这里的字符串必须是0-9的字符(可以包含正负号,小数点)的数值型字符串,否则虽然可以编译运行成功,但是执行到这个解析的语句时,就会报异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值