博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java第十四天(字符串的其他功能、StringBuffer、Random、System)
阅读量:5877 次
发布时间:2019-06-19

本文共 9399 字,大约阅读时间需要 31 分钟。

hot3.png

(9)字符串的其他的功能

a816275eea744badb8e572c39055981e2cc.jpg

fd84a62a34fdc1626ac0de860adb4f481b3.jpg

93a518fe929c27e851465c145b08b24b1ce.jpg

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

练习题2:

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

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

提示:创建每个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));    }}

1666d86d9d5430f024f8f3f6d0db488f35f.jpg

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

2.==:

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

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

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);    }}

f19a76a8822b9038ca1b2ba582b156fa097.jpg

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

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

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

synchronized ,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、 D等)正在用这个方法(或者该类的其他同步方法),有的话要等正在使用synchronized方法的线程B(或者C 、D)运行完这个方法后再运行此线程A,没有的话,锁定调用者,然后直接运行。它包括两种用法:synchronized 方法和 synchronized 块。

(3)StringBuffer构造器

579470118ff9e6892b620bb02f3042dd17a.jpg

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());    }}

738dc0a92c6888eee4a4cb61976c7e5dc69.jpg

(4)StringBuffer的API

e00a28aef713da84e5808a88c7372c9c20d.jpg

可变字符串的追加返回的都是这个可变字符串的本身的引用,所以通过链式方式来追加代码。

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);    }}

207d4d461af768d8729c1dfc41f98ea7eec.jpg

40fc466fc46698c75147c39219f8bb359fe.jpg

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

3816d05a930e9847cbe565eba63666a0c16.jpg

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);    }}

002f8b14c2b017023202bae9cbfc2e504ba.jpg

c3767f34f2fefdabc5a273bc031cf97914a.jpg

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);    }}

e2d080d6fcceab801f6d2c62e5009fb2d76.jpg

e08c1bb496eeac964a3850233ef624252fa.jpg

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);    }}

2ee55b4277f1090d170e3f7c3a4349dca5f.jpg

 

62.Random随机数产生类

可以自己定义一些获取随机的整数的规则

250dfbd43ff46d33cd0fa068eeeeb40204c.jpg

008f11f1e8207560c13872024c9d4a6daab.jpg

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类(了解)

480594805f95c8db427a18d749edc65f50e.jpg

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

42e88db10345219bbac161dcd28d90d2dd5.jpg

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));    }}

efac0bb950273e9635f881e372786bddf94.jpg

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();            }        }    }}

4002db35b718c07a0f0e8050e2879b0cb56.jpg

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 objects=p.keySet();        for(Object obj:objects){            String key=(String)obj;            String value=p.getProperty(key);            System.out.println(key+"------->"+value);        }    }}

3929720adbe61124bb1e973afebf12ffc21.jpg

 

转载于:https://my.oschina.net/u/4110331/blog/3049239

你可能感兴趣的文章
配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法...
查看>>
AIX 7.1 install python
查看>>
PHP盛宴——经常使用函数集锦
查看>>
重写 Ext.form.field 扩展功能
查看>>
Linux下的搜索查找命令的详解(locate)
查看>>
福利丨所有AI安全的讲座里,这可能是最实用的一场
查看>>
开发完第一版前端性能监控系统后的总结(无代码)
查看>>
Python多版本情况下四种快速进入交互式命令行的操作技巧
查看>>
MySQL查询优化
查看>>
【Redis源码分析】如何在Redis中查找大key
查看>>
android app启动过程(转)
查看>>
安装gulp及相关插件
查看>>
如何在Linux用chmod来修改所有子目录中的文件属性?
查看>>
Applet
查看>>
高并发环境下,Redisson实现redis分布式锁
查看>>
关于浏览器的cookie
查看>>
Hyper-V 2016 系列教程30 机房温度远程监控方案
查看>>
.Net 通过MySQLDriverCS操作MySQL
查看>>
JS Cookie
查看>>
ubuntu Unable to locate package sysv-rc-conf
查看>>