[Java]开发安卓,你得掌握的Java知识8——StringB
0.前言
上一篇文章(Java知识7)中,
我们讲解了Java的两个重点:抽象类和接口若想要了解“类”的主要知识,可以去看前面的文章
《[Java]开发安卓,你得掌握的Java知识5》
《[Java]开发安卓,你得掌握的Java知识4》
《[Java]开发安卓,你得掌握的Java知识3》由于最终目的是要开发安卓app,
因此这里使用的IDE是AS(Android Studio)
(不会使用的可以参考下面这篇文章中的例子)
《[Java]开发安卓,你得掌握的Java知识2》
1.本文主要内容简介
-
String类与StringBuilder的基础概念
-
String类与StringBuilder的常用方法
2.基础知识讲解
2.1不可变字符串类——String
String实际上就是一个字符数组
一旦String类的对象被常量字符串赋值,该字符串便无法改变
(注意,是字符串无法改变,不是这个String对象的值无法改变)
String str = "abc";
str = "edf";
- 注意,这里看似可变,实际上是改变了str所指向的存储空间,
“abc”已经不能被改变了- 可以理解为,str存储的是字符数组的首地址
=================================分割线==================================
- “==”所比较的实际是两个对象是否一样,这里就是在比较两个String变量是否指向同一个地址。
String str1 = "abc";
String str2 = "abc";
System.out.prinln(str1==str2);
输出为:
true
- 结果表明:
只要字符串常量一模一样,那么不同的变量就会共享这一个字符串常量
(即会指向同一个内存空间)
=================================分割线==================================
- 可以使用字节数组byte[]来创建字符串,具体思路就是:
定义一个字节数组,并将其组作为构造函数的参数- 另外,字符数组同理可以创建字符串
byte[] name = {'a','b','c'};
String str4 = new String(name);
System.out.println(str4);
char[] name2 = {'你','好','啊'};
String str5 = new String(name2);
System.out.println(str5);
输出为:
abc
你好啊
=================================分割线==================================
String类的方法 | 具体作用 |
---|---|
charAt(i) | 获取字符串中的一个字符(i为索引值) |
compareTo(str) | 两个字符串的比较,返回值为0是表示相同 |
concat(str) | 连接两个字符串,返回合出来的字符串 |
contains(str) | 判断一个字符串是否包含另外一个字符串 |
endsWith(str) | 判断是否以某个字符串结尾 |
startsWith(str) | 判断是否以某个字符串开头 |
startsWith(str,i) | 判断是否以某个字符串开头,i表示从第i个开始算 |
equals(str) | 两个字符串进行比较(比较字符串内容而非地址) |
indexOf(str) | 子字符串在另外一个字符串里的位置(不存在返回-1) |
length | 获取字符串的长度 |
substring(i) | 获取子字符串,从i到结尾(i为索引值) |
substring(a,b) | 获取子字符串,从a到b(a,b为索引值) |
toCharArray | 将字符串转化为字符数组 |
toLowerCase | 将所有字符转化为小写 |
toUpperCase | 将所有字符转化为大写 |
trim() | 将字符串前面和后面的空格字符删除 |
=================================分割线==================================
2.2可变字符串类 StringBuilder与StringBuffer
StringBuilder与StringBuffer用法区别不大
它们二者的主要区别在于:
StringBuffer线程安全,但是效率慢
StringBuilder线程不安全,效率更高下面我们主要以StringBuilder讲解为主
=================================分割线==================================
- 先定义一个StringBuilder对象
StringBuilder sb = new StringBuilder(6);
- 后面的6表示预先创建好6个空间,让后面的操作效率更高
=================================分割线==================================
StringBuilder类中的许多方法与String类的相同
(上面列举的那些),因此不反复赘述StringBuilder类我们主要关注:增删改插,即:
增 | 删 | 改 | 插 |
---|---|---|---|
append() | delete() | replace() | insert() |
=================================分割线==================================
- 增append()
即在末尾增加内容,这也是它被称为可变字符串的原因
StringBuilder sb = new StringBuilder(6);
sb.append("I");
sb.append(" Love");
sb.append(" Android");
System.out.println(sb);
输出结果:
I Love Android
=================================分割线==================================
- 插 insert(i,str)
即在中间插入内容,i表示插入的位置,str表示插入的字符串
StringBuilder sb = new StringBuilder(6);
sb.append("I");
sb.append(" Love");
sb.append(" Android");
sb.insert(2, "also ");
System.out.println(sb);
输出结果:
I also Love Android
=================================分割线==================================
- 改/替换 replace(i , j , str)
即在替换中间内容,i表示替换的起始位置,j表示替换到哪里,str表示要替换为的字符串
StringBuilder sb = new StringBuilder(6);
sb.append("I");
sb.append(" Love");
sb.append(" Android");
//这里开始替换
int start = sb.indexOf("Android");
int end = start + "Android".length();
sb.replace(start,end,"you!!!");
System.out.println(sb);
输出结果:
I Love you!!!
- replace的麻烦的地方在于,替换的起始点与终点需要自己计算
=================================分割线==================================
- 删 delete(i , j)
即在删除中间内容,i表示删除点的起始位置,j表示删除到哪里
StringBuilder sb = new StringBuilder(6);
sb.append("I");
sb.append(" love");
sb.append(" Android");
System.out.println(sb);//删之前
sb.delete(0,7);//从第0位删到第7位
System.out.println(sb);//删之后
输出结果:
I Love Android
Android
3.总结
(1)本文讲解了String类与StringBuilder类的基本知识概念以及常用方法。由于这两个类的方法数量众多,这里就不一一讲解,有需要的可以去
《Java标准版的API规范》这里搜索具体的类及其使用方法
(2)虽然字符串类的方法都不难,但是想要熟练使用,还是需要多多练习,只有熟练掌握了字符串的使用,后面的Android开发才会更加顺利