String类、字符串缓冲区、正则表达式、

1、String类

(1)概述:

String类代表字符串,字符串是常量,创建之后不能更改,一旦这个字符串确定了,就会在内存中(堆中的常量池)生成这个字符串,字符串本身不能改变,但变量的地址是能够改变的,字符串的本质是一个字符的数组。

(2)字符串的构建

字符串中有大量的的重载构造方法,通过String类的构造方法可以完成字符穿的构建,还可以通过双引号的方式进行创建对象

两者的是否相同?

package com.oracle.demo02;

public class Demo02 {

    public static void main(String[] args) {
        String str1="aaabbb";
        String str2=new String("aaabbb");
        System.out.println(str1==str2);
        System.out.println(str1.equals(str2));

    }

}

str1创建在内存中只有一个对象

str2创建在内存中有两个对象,一个 new的对象在堆中,一个字符串本身对象,在字符串常量池中

 (3)String构造方法

-------------------String()初始化一个新创建的String对象,表示一个空字符序列

例如:String s1 = new String(); //创建String对象,字符串中没有内容

------------------- String(byte[  ] bytes)通过平台使用的默认字符解码指定byte数组,构建新的String

 例如:byte[] bys = new byte[]{97,98,99,100};

String s2 = new String(bys);

--------------------String(byte[  ] bytes  int offset  ,int  length )通过平台使用的默认字符解码指定byte子数组,构建新的String

例如:String s3 = new String(bys, 1, 3); //创建String对象,把一部分数组元素作为字符串的内容,参数offset为数组元素的起始索引位置,参数length为要几个元素

--------------------String(char[ ] values) 分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。

例如:

char[] chs = new char[]{’a’,’b’,’c’,’d’,’e’};

String s4 = new String(chs); //创建String对象,把数组元素作为字符串的内容

--------------------String(char[] value, int offset, int count)分配一个新的 String,它包含取自字符数组参数一个子数组的字符。

例如:

String s5 = new String(chs, 0, 3);//创建String对象,把一部分数组元素作为字符串的内容,参数offset为数组元素的起始索引位置,参数count为要几个元素

(4)String类的方法查找

---------------length()返回字符串的长度

String aaa="abcdefgrthajnsdjkcv";
        int b=aaa.length();
        System.out.println(b);

 

----------------------获取部分字符串substring(int beginindex)或者substring(int beginIndex ,  int endIndex)

---------------------判断是否以xxx为开头starsWith(xxx)返回值为true或false

----------------------判断是否以xxx为结尾endsWith(xxx)返回值为true或false

----------------------判断字符串是否包含另一个字符contains( char   s)判断是否包含指定字符串,包含返回true,不包含返回false

String str = "abcde";
int index = str.indexOf(“bcd”); //判断是否包含指定字符串,包含则返回第一次出现该字符串的索引,不包含则返回-1
boolean b2 = str.contains("bcd");//判断是否包含指定字符串,包含返回true,不包含返回false

 

----------------------- 将字符串转成一个字符数组。或者字节数组。.getBytes()转换成一个数组。toCharArray()转换成一个字符数组

String str = "abcde";
char[] chs = str.toCharArray();
byte[] bytes = str.getBytes();

 

 

 

-------------------------- 判断两个字符串中的内容是否相同equals()

 --------------------------判断两个String是否相等,不考虑大小equalsIgnoreCase()

String str = "abcde";
String str2 = "abcde";
String str3 = "hello";
boolean b1 = str.equals(str2);
boolean b2 = str.e/quals(str3);

 

---------------------------------获取该字符串的内容toString()

public class Demo02 {
    public static void main(String[] args) {
        String str = new String("hello");
        System.out.println( str.toString() );
        System.out.println(str);
    }
}

 

 还有:

l 判断该字符串的内容是否为空的字符串

l 获取给定的字符,在该字符串中第一次出现的位置

l 获取该字符串中指定位置上的字符

把该字符串转换成 小写字符串

把该字符串转换成 大写字符串

l 在该字符串中,将给定的旧字符,用新字符替换

在该字符串中, 将给定的旧字符串,用新字符串替换

去除字符串两端空格,中间的不会去除,返回一个新字符串

public class Demo03 {
    public static void main(String[] args) {
        String str="hellojavanihaojava.txt";
        //求字符串长度
        System.out.println(str.length());
        //截取字符串
        System.out.println(str.substring(3));
        System.out.println(str.substring(3,5));
        //判断前缀
        System.out.println(str.startsWith("b"));
        //判断结尾
        System.out.println(str.endsWith(".txt"));
        //判断一个字符串中是否包含另一个字符串
        System.out.println(str.contains("java"));
        //返回一个字符串在另一个字符串中第一次出现的索引值
        //如果不存在该字符串则返回-1
        System.out.println(str.indexOf("5"));
        String str1="nihaojava";
        //将字符串转为字节数组
        byte[] b1=str1.getBytes();
        for(int i=0;i<b1.length;i++){
            System.out.print(b1[i]+" ");
        }
        //将字符串转为字符数组
        char[] c1=str1.toCharArray();
        for(int j=0;j<c1.length;j++){
            System.out.print(c1[j]+" ");
        }
        //判断两个字符串是否内容相同(忽略大小写)
        System.out.println(str1.equalsIgnoreCase("NiHaojava"));
    }
}

 

 

 String类方法使用练习

 题目一:获取指定字符串中,大写字母、小写字母、数字的个数。

 

package demo01;

public class Demo03 {
        public static void main(String[] args) {
            String str="ADSFGbaersg1123125337";
            int bigCount = 0; //大写字母的个数
            int smallCount = 0; //小写字母的个数
            int numberCount = 0; //数字的个数
            for (int i=0; i < str.length(); i++) {
                 char ch = str.charAt(i); //获取指定位置上的字符
                if (ch>='A' && ch<='Z') {
                    bigCount++;
        } else if (ch>='a' && ch<='z') {
        smallCount++;
        } else if (ch>='0' && ch<='9') {
                numberCount++;
        }
        }
        System.out.println("大写字母个数:"+bigCount);
        System.out.println("小写字母个数:"+smallCount);
        System.out.println("数字个数:"+numberCount);
        }
        }
            

 

 

 

 

l 题目二:将字符串中,第一个字母转换成大写,其他字母转换成小写,并打印改变后的字符串。

 

package demo01;

public class Demo04 {
    public static void main(String[] args) {
        String str="aA";
        //获取第一部分为字符串
        String start = str.substring(0,1);
        //获取第二部分为字符串
        String end = str.substring(1);
        //把第一部分字符串转换成大写字母,把第二部分字符串转换成小写字母
        String big = start.toUpperCase();
        String small = end.toLowerCase();
        //把两部分字符串连接在一起,得到一个完整的字符串
        System.out.println(big+small);
            }
}

题目三:查询大字符串中,出现指定小字符串的次数。如“hellojava,nihaojava,javazhenbang”中查询出现“java”的次数。

 

public static int getCount(String big, String small){
    int count = 0; //出现小串的次数
    int index = -1;//出现小串的位置
    /*
        while的循环条件三步骤:
        步骤一. big.indexOf(small) 获取小串在大串中出现的位置
        步骤二. 把小串出现的位置,赋值给变量index
        步骤三. 判断出现的位置是否为-1, 如果位置等于-1,说明大串中已经查询不到小串了;如果位置不等于-1,那么,进行循环,完成次数累加与修改大串的操作
*/
    while ((index = big.indexOf(small)) != -1 ){
        count++;//出现次数+1
        //更改大串内容
        big = big.substring(index+1);
}
return count;
}

 练习2

用代码演示String类中的以下方法的用法
(1)boolean isEmpty(): 判断字符串是不是空串,如果是空的就返回true
(2)char charAt(int index): 返回索引上的字符
(3)String toLowerCase(): 字符串转成小写
(4)String toUpperCase(): 字符串转成大写
(5)String replace(char oldChar, char newChar): 将字符串中的老字符,替换为新字符
(6)String repalce(String old, String newstr): 将字符串中的老字符串,替换为新字符串
(7)String trim(): 去掉字符串两端空格

    public static void main(String[] args) {
        //(1)boolean isEmpty(): 判断字符串是不是空串,如果是空的就返回true
        String str1=new String();
        boolean a=str1.isEmpty();
        System.out.println(a);
        //(2)char charAt(int index): 返回索引上的字符
        String str2="abcde";
        char b=str2.charAt(2);
        System.out.println(b);
        //(3)String toLowerCase(): 字符串转成小写
        String str3="ABCDEFG";
        String c=str3.toLowerCase();
        System.out.println(c);
        //(4)String toUpperCase(): 字符串转成大写
        System.out.println(c.toUpperCase());
        //(5)String repalce(char oldChar, char newChar): 将字符串中的老字符,替换为新字符
        String str4="abc";
        String d=c.replace("b","s");
        System.out.println(d);
        //(6)String repalce(String old, String newstr): 将字符串中的老字符串,替换为新字符串
        String e=d.replace(d, "falg");
        System.out.println(e);
        //(7)String trim(): 去掉字符串两端空格
        String str5="   ffff   ";
        System.out.println(str5);
        String f=str5.trim();
        System.out.println(f);    
    }//main

}/

 

 2、字符串缓冲区

字符串缓冲区支持可变的字符串,

StringBuffer又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。

 (1)StringBuffer类

 StringBuffer方法的使用:

 

-----------------append():将指定字符串添加到此字符序列

----------------delete(int start,int end)删除从start到end的字符

-----------------insert(int offset ,String str)将str插入该字符串中

-----------------replace(int start ,int end .String str)使用str替换该字符串中从start到end的字符

-----------------reverse()将字符串使用反序取代

-----------------toString()返回此序列中数据的字符串表现形式

 

创建一个字符串缓冲区对象。用于存储数据。
StringBuffer sb = new StringBuffer();
sb.append("haha"); //添加字符串
sb.insert(2, "it");//在指定位置插入
sb.delete(1, 4);//删除
sb.replace(1, 4, "cast");//替换指定范围内的内容
String str = sb.toString();

练习:int[] arr = {34,12,89,68};将一个int[]中元素转成字符串  格式 [34,12,89,68]

public static String toString_2(int[] arr) {
        StringBuffer sb = new StringBuffer();        
        sb.append("[");
        for (int i = 0; i < arr.length; i++) {
            if(i!=arr.length-1){
                sb.append(arr[i]+",");
            }else{
                sb.append(arr[i]+"]");
            }
        }        
        return sb.toString();
    }

 

  StringBuilder它也是一个可变的字符序列它比 StringBuffer 要快。

 

 3、正则表达式

 正则表达式在项目中使用的地方是在注册时,看看注册的名字,邮箱,电话等符不符合具体的规则

正则表达式是一个字符串使用单个字符串来描述、用来定义匹配规则,匹配一系列符合某个句法规则的字符串。在开发中正则表达式通常被用来检索、替换那些符合某个规则的文本

 

Pattern类中有正则表达式的的规则定义,正则表达式中明确区分大小写字母

 

举例:校验qq号码.
1: 要求必须是5-15位数字
    2: 0不能开头
代码演示:
    String qq = "604154942";
    String regex = "[1-9][0-9]{4,14}";
    boolean flag2 = qq.matches(regex);
举例:校验手机号码
1:要求为11位数字
2:第1位为1,第2位为3、4、5、7、8中的一个,后面9位为0到9之间的任意数字。
代码演示:
    String phone = "18800022116";
    String regex = "1[34578][0-9]{9}";
    boolean flag = phone.matches(regex);
匹配合法的邮箱
匹配规则:
    ”[a-zA-Z_0-9]+@[a-zA-Z_0-9]+(\\.[a-zA-Z_0-9]+)+”
    ”\\w+@\\w+(\\.\\w+)+”
获取IP地址(192.168.1.100)中的每段数字
匹配规则:
    ”\\.”

 

posted @ 2018-10-06 21:13  yangyang1182  阅读(318)  评论(0编辑  收藏  举报