Java第十四天(字符串的其余功能、StringBuffer、Random、System)

(9)字符串的其余的功能java

public static void main(String[] args) {
        String s="  Baba.Mama.gotowork   ";
// split(String regex)  按照给定的正则表达式拆分字符串成为数组
        String[] s1=s.split("\\.");//必须是符号才能够,并且最好都加上\\
        for (String s2 : s1) {
            System.out.println(s2);
        }
// replace(char oldChar, char newChar)  用新字符替换字符串中指定旧字符
        String s3=s.replace('a','o');
        System.out.println(s3);
// replace(CharSequence target, CharSequence replacement)  用新子字符串替换字符串中指定旧子字符串
        String s4=s.replace("work","atrip");
        System.out.println(s4);
// trim()   去掉字符串中先后的空格不能去掉中间的空格
        String s5=s.trim();
        System.out.println(s5);
    }

练习题:正则表达式

需求:找出下面字符串中li的数量数组

  "liasdflihsdhllihsdflihsdfiligsdfglikhsdfklilisdflio"安全

/*需求:找出下面字符串中li的数量
  "liasdflihsdhllihsdflihsdfiligsdfglikhsdfklilisdflio"*/
public class Homework2 {
    public static void main(String[] args) {
        String s="liasdflihsdhllihsdflihsdfiligsdfglikhsdfklilisdflio";
        int sum=0;
        int i=s.indexOf("li");
        //当索引大于字符串长度的时候会返回-1
        while(i!=-1){
            sum++;
            i=s.indexOf("li",i+2);
        }
        /*char[] s1=s.toCharArray();
        for (int i = 0; i < s1.length; i++) {
            if(s1[i]=='l'&&s1[i+1]=='i'&&i+1<s1.length){
                sum++;
            }
        }*/
        System.out.println("这段字符串中li的数量为"+sum);
    }
}

练习题2:app

定义一个方法,传入字符串格式(idcard:name:age:gender)的分隔形如dom

“120384722312901:kexin:20:1|3219212131312:hantao:22:1|120121121312:zhangmeiling:21:2”,将该字符串分解,将属性赋给定义的Person类的对象上而且输出。ide

提示:建立每一个Person对象,每一个对象都有idcard、name、age、gender属性性能

public class Person {
    private String idcard;
    private String name;
    private int age;
    private int gender;

    public void setIdcard(String idcard) {
        this.idcard = idcard;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setGender(int gender) {
        this.gender = gender;
    }

    public String getIdcard() {
        return idcard;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public int getGender() {
        return gender;
    }

    public Person() {
    }

    public Person(String idcard, String name, int age, int gender) {
        this.idcard = idcard;
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Person{" +
                "idcard='" + idcard + '\'' +
                ", name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", gender='" + gender + '\'' +
                '}';
    }
}
import java.util.Arrays;

public class Homework3 {
    /*定义一个方法,传入字符串格式(idcard:name:age:gender)的分隔形如
“120384722312901:kexin:20:1|3219212131312:hantao:22:1|120121121312:zhangmeiling:21:2”,
    将该字符串分解,将属性赋给定义的Person类的对象上而且输出。
    提示:建立每一个Person对象,每一个对象都有idcard、name、age、gender属性*/
    public static void main(String[] args) {

        String str="120384722312901:kexin:20:1|3219212131312:hantao:22:1|120121121312:zhangmeiling:21:2";
//     以|为分隔把对象分开变成数组
        String[] sc=str.split("\\|");
        Person[] ps=new Person[3];
        for (int i = 0; i < sc.length; i++) {
            //以:为分隔将我的属性拆到一个数组
            String[] s=sc[i].split("\\:");
            //建立一个Person对象
            Person p=new Person();
            //将数组中的属性赋值给这我的
            p.setIdcard(s[0]);
            p.setName(s[1]);
            //Integer.parseInt(String str)将字符串转化整数
            p.setAge(Integer.parseInt(s[2]));
            p.setGender(Integer.parseInt(s[3]));
            System.out.println(p);
            ps[i]=p;
        }
        //数组的打印
        System.out.println(Arrays.toString(ps));

    }
}

1.lang下面的类都不须要引入就能够直接使用,String不须要引入就可使用,String类被final修饰了不能被继承this

2.==:spa

基本数据类型:比较的是值;

引用数据类型:比较的是地址

equals针对的是object的对象或者子类的对象,基本数据类型不是类不能用equals,equals能够比较的两个对象的业务含义判断两个对象是否相等(经过方法覆写定义业务规则)

3.数组并非对象不是类

4.String下有覆写父类equals的方法,经过equals比较的是两个String的值不是地址,其余的类中没有覆写equals方法的调用equals比较的是地址

 

 

61.可变字符串

(1)String一旦被建立后,值不能改变,若是参与了操做,引用发生了变化,不是在原有的字符串上操做,而是新产生了一个字符串

StringBuffer建立后值能够变化(增删改),地址不会有变化,不会产生新的字符串。

public class StringBufferDemo {
    public static void main(String[] args) {
        StringBuffer s=new StringBuffer("我要吃");
        StringBuffer s1=s.append("红烧肉");
        System.out.println(s);
        System.out.println(s1);
        System.out.println(s==s1);
    }
}

(2)可变字符串是线程安全的

多个线程同时操做同一个资源的时候,可能发生数据安全性的问题。

StringBuffer是线程同步的(线程安全的),可是牺牲了性能。

synchronized 关键字,表明这个方法加锁,至关于无论哪个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、 D等)正在用这个方法(或者该类的其余同步方法),有的话要等正在使用synchronized方法的线程B(或者C 、D)运行完这个方法后再运行此线程A,没有的话,锁定调用者,而后直接运行。它包括两种用法:synchronized 方法和 synchronized 块。

(3)StringBuffer构造器

public class StringBufferDemo1 {
    public static void main(String[] args) {
        //创造一个可变字符,默认容量是16个字符
        StringBuffer s1=new StringBuffer();
        StringBuffer s2=new StringBuffer(16);
        StringBuffer s3=new StringBuffer("God");
        System.out.println(s1.capacity());
        System.out.println(s3.capacity());
        //追加的时候若是超出了16个会自动的扩容
        s3.append("dhjgbduhcgcgauandjkhliuw");
        System.out.println(s3.capacity());
    }
}

(4)StringBuffer的API

可变字符串的追加返回的都是这个可变字符串的自己的引用,因此经过链式方式来追加代码。

public class StringBufferDemo2 {
    public static void main(String[] args) {
        StringBuffer s=new StringBuffer();
//链式追加
        s.append(true)
                .append(2)
                .append('K')
                .append(1.2f)
                .append("没有一点点防备")
                .append(3.4)
                .append(new Student("小明",8));
        System.out.println(s);
    }
}

public class StringBufferDemo3 {
    public static void main(String[] args) {
        StringBuffer s=new StringBuffer("wonderfulyou");
        //在字符串中索引为6的位置插入why
        s.insert(6,"why");
        System.out.println(s);
    }
}

public class StringBufferDemo4 {
    public static void main(String[] args) {
        StringBuffer s=new StringBuffer("wonderfulyou");
        //删除索引处的字符
        s.deleteCharAt(3);
        System.out.println(s);
        //删除索引范围内的字符串,包头不包尾
        s.delete(6,9);
        System.out.println(s);
    }
}

public class StringBufferDemo5 {
    public static void main(String[] args) {
        StringBuffer s=new StringBuffer("wonderfulyou");
        //用指定的字符串替换指定索引范围内的子字符串
        s.replace(9,12,"me");
        System.out.println(s);
        //字符串的倒置
        s.reverse();
        System.out.println(s);
    }
}

public class StringBufferDemo6 {
    public static void main(String[] args) {
        StringBuffer s=new StringBuffer("hoohwoowmoomgxs");
        //检索指定字符串最后一次出现的索引
        int i =s.lastIndexOf("oo");
        System.out.println(i);
        //从开始到指定索引处的子字符串中检索指定字符串最后一次出现的索引
        int j=s.lastIndexOf("oo",8);
        System.out.println(j);
    }
}

 

62.Random随机数产生类

能够本身定义一些获取随机的整数的规则

import java.util.Random;

public class RandomTest {
    public static void main(String[] args) {
        Random r=new Random();
        //得到一组随机数,每次运行随机数都不同
        for (int i=0;i<10;i++) {
            int n= 0;
            n = r.nextInt();
            System.out.println(n);
        }
        //在0-100之间取一组随机数
        for (int i = 0; i < 10; i++) {
            int n=r.nextInt(100);
            System.out.println(n);
        }
    }
}
import java.util.Random;

public class RandomTest1 {
    public static void main(String[] args) {
        //经过指定种子的随机数对象来得到一组不变的数据
        Random r1=new Random(3);
        for (int i = 0; i < 10; i++) {
            int n=0;
            n = r1.nextInt();
            System.out.println(n);
        }
        //在0-1000之间取一组随机数
        for (int i = 0; i < 10; i++) {
            int n=0;
            n = r1.nextInt(1000);
            System.out.println(n);
        }
    }
}

应用场景:验证码、文件命名

63.System类(了解)

public static void main(String[] args) {
    Scanner s=new Scanner(System.in);
    System.out.println();
}

import java.util.Arrays;

public class SystemDemo1 {
    public static void main(String[] args) {
       // arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
        int[] arr={11,22,33,44,55,66,77};
        int[] arr1={001,002,003,004,005};
    /* @param      src      the source array.
     * @param      srcPos   starting position in the source array.
     * @param      dest     the destination array.
     * @param      destPos  starting position in the destination data.
     * @param      length   the number of array elements to be copied.
     须要复制插入的数组,从插入数组的索引出开始,目标数组,从目标数组的索引处开始插入,插入的位数*/
        System.arraycopy(arr,2,arr1,1,3);
        System.out.println(Arrays.toString(arr1));
    }
}

public class SystemDemo2 {
    public static void main(String[] args) {
         int[] s1={12,344,566,32,45};
         long start=System.currentTimeMillis();
         method(s1);
         long end=System.currentTimeMillis();
        System.out.println("程序运行的时间是:"+(end-start)+"毫秒");
        System.exit(1);//只要status不为0就是正常停止
    }
    public static void method(int[] arr){
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

import java.util.Properties;
import java.util.Set;

public class SystemDemo3 {
    public static void main(String[] args) {
        //得到当前的系统属性
        Properties p=System.getProperties();
        //System.out.println(p);
        Set<Object> objects=p.keySet();
        for(Object obj:objects){
            String key=(String)obj;
            String value=p.getProperty(key);
            System.out.println(key+"------->"+value);
        }
    }
}

相关文章
相关标签/搜索