[Java]开发安卓,你得掌握的Java知识8——StringB

2019-08-13  本文已影响0人  入梦瞌睡

0.前言

1.本文主要内容简介

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);
=================================分割线==================================
  • 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!!!

=================================分割线==================================
  • 删 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开发才会更加顺利

上一篇下一篇

猜你喜欢

热点阅读