String,

人盡茶涼 提交于 2019-11-28 20:18:34

先写String,至于其他两个过两天吧再

1. String


     特点:
         a. java.lang.String   构建字符串对象      "aa"  "12"  "中文"  字符串常量
         b. 字符串是常量;它们的值在创建之后不能更改  private final char value[];
         c. String类提供了很多非常好用的方法
         d. 字符串可以使用+进行连接   
         e. 字符串String类型本身是final声明的,意味着我们不能继承String
        f. 字符串的对象也是不可变对象,意味着一旦进行修改,就会产生新对象
         g. String对象内部是用字符数组进行保存的
        h. 字符串常量存储在常量池  -->  常量池在内存的那个区域呢?  方法区--> 堆内存 --> 元空间(电脑的内存)


 2. String类对象的创建方式   


         a. String str="";
         b. String类的构造器
             new String();//创建一各空串对象  this.value="".value
             new String("html5");//创建一个指定字符串内容对象  this.value="html5".value
                ==不能判断new的String对象
            new String(char[] c);//将char数组中全部字符构成字符串对象
             new String(char[] c,int offset,int count);将char数组中部分字符构成字符串对象
                     offset  起始索引值位置   
                     count   字符个数  
             new String(byte[] b);将byte数组中的数据构建成字符串对象  (ASCII)  默认采用平台字符集
             new String(byte[] b,int offset,int length);将byte数组中部分字符构成字符串对象
                     offset  起始索引值位置
                     length   字节个数
             new String(byte[] b,Charset charset); 指定字符集进行处理
         c. 静态方法
                 valueOf();   基本数据类型--->String
         d. ""+对象|基本数据类型


 3. 字符串对象的个数


     String str1="java";//常量池中一个对象
     String str2=new String("python");//堆内存中有一个String类的对象,在常量池中有一个"python"对象    

 

 4. 字符串拼接内存存储位置

         常量+常量   结果在常量池
        变量+变量  结果在堆内存
         变量+常量  结果在堆内存
         如果调用intern方法,结果就会在常量池中

这个字串的拼接和new对象还不一样

关于常量池的问题:

(1)JDK1.6及其之前:方法区

(2)JDK1.7:堆

(3)JDK1.8:元空间    元空间是在内存中,但是在JVM之外的内存

 

String中的各种方法查阅官方的API里面啥都有,解释的比我

部分方法

 1. String字符串的对比
     a. equals方法    来自于对Object中equals方法的重写   
         对比字符串的内容是否一致  
         例子:str1.equals(str3)
     b. equalsIgnoreCase()  忽略大小写对比字符串的内容是否一致
         例子:str1.equalsIgnoreCase(str3)
     c. compareTo()    String类实现了Comparable接口    
         比较两个字符串的大小   正数(this大) 0(相等)   负数(参数大)
     d. compareToIgnoreCase()   忽略大小写比较两个字符串的大小
 
 2. String空串
     a. length()   获得字符串的字符长度
         数组中的length和String中length有什么区别
             数组中的length是属性
             String中的length是方法
     b. isEmpty()  判断字符串是否是空串
 3. String方法系列1
          (1)boolean isEmpty():字符串是否为空
    (2)int length():返回字符串的长度
    (3)String concat(xx):拼接,等价于+
            结果都在堆内存
    (4)boolean equals(Object obj):比较字符串是否相等,区分大小写
    (5)boolean equalsIgnoreCase(Object obj):比较字符串是否相等,区分大小写
    (6)int compareTo(String other):比较字符串大小,区分大小写,按照Unicode编码值比较大小
    (7)int compareToIgnoreCase(String other):比较字符串大小,不区分大小写
    (8)String toLowerCase():将字符串中大写字母转为小写
    (9)String toUpperCase():将字符串中小写字母转为大写
    (10)String trim():去掉字符串前后空白符  
        注册: salmon
  4. 系列2  查找
      contains()   判断字符串中是否包含另一个字符串
      indexOf(String str)  查找str在指定字符串第一次出现的索引位置,找不到返回-1
      lastIndexOf(String str)查找str在指定字符串最后一次出现的索引位置,找不到返回-1
      
  5. 系列3  字符串截取
      substring(int startIndex)  从指定下标截取到字符串末尾  (包含指定下标位置的字符)
    substring(int startIndex,int endIndex) 种开始索引值截取至结束索引值 (左闭右开)

 

小练习题:手动输入一个名字,形式为ZHang_SAn_fEng,最终转换成 zhangSanFeng

@Test
	public void Test5(){
		String str="ZHang8754_SAn_fEng";
		String str1="[^a-zA-Z]";
		str=str.replaceAll(str1, "").toLowerCase();//注意replace()方法不支持正则
		
		System.out.println(str);
		
	}

正则表达式:

字符类

[abc]abc(简单类)

[^abc]:任何字符,除了 abc(否定)

[a-zA-Z]azAZ,两头的字母包括在内(范围)

预定义字符类

.:任何字符(与行结束符可能匹配也可能不匹配)

\d:数字:[0-9]

\D:非数字: [^0-9]

\s:空白字符:[ \t\n\x0B\f\r]

\S:非空白字符:[^\s]

\w:单词字符:[a-zA-Z_0-9]

\W:非单词字符:[^\w]

边界匹配器

^:行的开头

$:行的结尾

Greedy 数量词

X?X,一次或一次也没有

X*X,零次或多次

X+X,一次或多次

X{n}X,恰好 n

X{n,}X,至少 n

X{n,m}X,至少 n 次,但是不超过 m

Logical 运算符

XYX 后跟 Y

X|YXY

(X):X,作为捕获组

常用的正则表达式:

1.验证用户名和密码,第一个字必须为字母,一共6~16位字母数字下划线组成:("^[a-zA-Z]\w{5,15}$")

2.验证电话号码:("^(\d{3,4}-)\d{7,8}$")正确格式:xxx/xxxx-xxxxxxx/xxxxxxxx

3.验证手机号码:("^13|4|5|6|7|8{9}$")

4.验证身份证号(15位):("\d{14}[[0-9],0-9xX]"),(18位):("\d{17}(\d|X|x)")

5.验证Email地址:("^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$")

6.只能输入由数字和26个英文字母组成的字符串:("^[A-Za-z0-9]+$")

7.整数或者小数:("^[0-9]+(.+){0,1}$")

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!