天天看点

【Java基础学习笔记】13、字符串和正则表达式字符串:String类可变长字符串正则表达式: 字符串的一些比较(排列)规则包装类 - 对应的就是8大基本数据类型

文章目录

  • 字符串:String类
    • 1.创建方式
    • 2.特点
    • 3.常量池
    • 4.编码问题
    • 5.常用API
  • 可变长字符串
    • StringBuilder 和 StringBuffer
  • 正则表达式: 字符串的一些比较(排列)规则
    • 常用标识
    • 字符
    • 常用API
  • 包装类 - 对应的就是8大基本数据类型
    • 包装类的使用:

字符串:String类

1.创建方式

 a.直接赋值创建

 b.构造方法创建

2.特点

 a.字符串就是字符数组包装成的对象,本质就是字符数组。

 b.String是final修饰的类,是不可被继承的。

 c.字符串一旦创建就不可修改,属于不可变的字符序列。

 d.String重写了toString(),euqlas(),hashCode()。

3.常量池

 1)常量池中放的都是常量(字面量/直接量)。

 2)只要是直接赋值的字符串,都指向常量池。

4.编码问题

编码方式:

 java中使用的字符集:UniCode字符集,JVM中读取

 操作系统编码:

  UTF-8: 1字符 = 3字节

  GBK: 1字符 = 2字节

编码:字符 -> 字节

 编码方式:

  byte[] getByte() - 默认方式编码(UTF-8)

  byte[] getByte(“charset”) - 自定字符集编码

解码:字节 -> 字符

 解码方式:

  new String(bs[]) - 默认方式解码

  new String(bs[], “charset”) - 自定义解码(有可能出现乱码问题)

解决乱码步骤:

  a.按照错误的编码方式进行编码

  b.将字节数组按照指定方式进行解码

5.常用API

 1)获得字符串的长度 - 字符个数

 int length = str.length();

 2)将字符串转变成字符数组

 char[] cs = str.toCharArray();

 3)获得字符串中的某一个字符

  char c = str.charAt(2);

 4)对比编码的大小写

  方式一:比较之前,全部转变成大写

   s1 = s1.toUpperCase();

   s2 = s2.toUpperCase();

   b1 = s1.equals(s2);

  方式二:比较之前,全部转变成小写

   s1 = s1.toLowerCase();

  方式三:忽略大小写比较

   boolean b2 = s1.equalsIgnoreCase(s2);

 5)字符串的拼接

  s1 = s1.concat(",.");

 6)s1是否包含指定字符子串 - 没有重载

  boolean isCon = s1.contains(“ll”);

 7)是否以指定字符串结尾

  boolean isEnds = s1.endsWith("@123.com");

 8)是否以指定字符串开始

  boolean isStarts = s1.startsWith("+86");

 9)从下标2,是否以指定字符串开始

  isStarts = s1.startsWith(“ll”, 2);

 10)字符串长度是否是0

  boolean isEmpty = str.isEmpty();

 11)替换字符串中指定内容

  s1 = s1.replace(“qnmlgb”, “***”);

 12)去掉头尾空格字符 \t \n

  s2 = s2.trim();

 13)截取字符串中的内容 - 有重载(前包含,后不包含)

  s4 = s3.substring(0, 8);

可变长字符串

StringBuilder 和 StringBuffer

1.属于可变长字符串,也就是在创建新的字符串的时候不会产生新的对象。

2.区别

 版本区别:

  StringBuilder -> JDK1.5

  StringBuffer -> JDK1.0

 线程安全:

  StringBuilder :线程不安全,效率高

  StringBuffer :线程安全,效率低

 使用环境:

  少量拼接使用String

  单线程环境操作大量数据使用StringBuilder

  多线程环境操作大量数据使用StringBuffer

3.创建

 new StringBuilder()

 new StringBuilder(Sting)

4.常用API:

 StringBuilder append(Obejct o) -追加(拼接)

 StringBuilder delete(int start, int end) - 删除

 StringBuilder insert(int offset, Object o) - 插入

 StringBuilder reverse() - 反转

正则表达式: 字符串的一些比较(排列)规则

常用标识

开头和结尾的标识符号:

 开头: ^

 结尾: $

字符

 []:一个字符的位置。

 [abc]:在这个位置中只能标识字符a或者字符b或者字符c。

 [a-z0-9A-Z]:资格字符的位置内容可以出现所有的大写字母和小写字母和所有数字。

 [.-*]: 所有的特殊字符放在括号中都是可以直接表示,不需要使用转义字符。

 Greedy 数量词:

  +: 出现一次或者多次

  ?: 出现一次或者0次

  *: 出现0次或者多次

  {n}: 刚好出现n次

  {n,m}: 最少出现n次,最多不超过m次

  {n,}: 至少n次

例如:

 a+: “aa” “aaa” “b”

 [a-z]{3}: “ex” “a2q” “asd” “qwe”

 邮箱:[A-Za-z]\w{5,17}

预定义字符类:

 . :表示所有字符

 \d :表示所以数字

 \w :表示[A-Za-z0-9_]

转义字符:

 将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如, n匹配字符 n。\n 匹配换行符。序列 \\\\ 匹配 \\ ,\\ ( 匹配 (。

常用API

字符串是否符合指定的正则表达式:

 boolean matches(“正则表达式”)

使用正则表达式替换字符串:

 String replaceAll(“正则表达式”,“替换成的字符”)

将字符串按照字母切割(分离):

 Stringp[] split(“正则表达式”);

包装类 - 对应的就是8大基本数据类型

byte    -   Byte
short	- 	Short
int 	-	Integer
long	-	Long
boolean -   Boolean
double	-   Double
float   -   Float
char    -   Character
           

包装类的使用:

1.创建方式

 a.直接赋值

  Integer i = 10;

 b.构造方法创建

  new Integer(int)

  new Intger(String) - 字符串默认只能出现数字,否则会出现数制转换异常

2.装箱 和 拆箱

 Integer 转换成 int -> 自动装箱

  int = Integer.intValue()

  都是编译器自动调用

 int 转换成 Integer -> 自动拆箱

  Integer i = Integer.valueOf()

  都是编译器自动调用

3.常用API

 String 和 int/Integr

  String 转换成 int

  int Integer.parseInt()

 String 转换成 Integer

  Integer new Integer(“String”)

  Integer Integer.valueOf()

4.Integer的特点

 a.Integer和int类型之间可以进行无缝切换,使用上没有任何区别。

 b.Integer是final的类,不可被继承。

5.常量池

 Integer常量池有范围:一个byte字节。

 byte字节的取值范围: -128 ~ 127

 超出范围,就是new对象