Java两周半速成之路(第九天)

news2024/11/14 21:04:39

一.Object类

1.概述:

Object类:是java中所有的类共同的父类

1、观察包所属后发现,Object类属于java.lang包下的类,今后使用的时候,不需要进行导包

2.构造方法

Object() 无参构造方法

3.Object类的成员方法

(1)public int hashCode()      返回对象的哈希码值

(2)public final Class getClass()      获取一个类对应的Class对象

(3)public String toString()      输出一个对象,实际上输出的是对象调用的toString()方法

演示:


/*
    Object类:是java中所有的类共同的父类
    1、观察包所属后发现,Object类属于java.lang包下的类,今后使用的时候,不需要进行导包

    构造方法:
        Object() 无参构造方法
    成员方法:
        public int hashCode() 返回对象的哈希码值。
        public final Class getClass() 获取一个类对应的Class对象
        public String toString() 输出一个对象,实际上输出的是对象调用的toString()方法

    一个标准类的最终写法:
        1、成员变量私有化
        2、构造方法(无参/所有参数)
        3、getXxx()和setXxx()
        4、toString()

 */
class Student {
    //包含了继承自Object类的方法
    String name;
    int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override              //toString()方法的重写
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class ObjectDemo1 {
    public static void main(String[] args) {
        //public int hashCode() 返回对象的哈希码值。
        Student s1 = new Student();
//        System.out.println(s1.hashCode());
        Student s2 = new Student();
//        System.out.println(s2.hashCode());

        // public final Class getClass() 获取一个类对应的Class对象
        Class c1 = s1.getClass();
        System.out.println(c1.hashCode());   //1163157884
        System.out.println(c1);          //class com.shujia.day10.Student

        Class c2 = s2.getClass();
        System.out.println(c2.hashCode());      //1163157884
        System.out.println(c2);       //class com.shujia.day10.Student

        //public String toString() 输出一个对象,实际上输出的是对象调用的toString()方法
        System.out.println(s1.toString());  //com.shujia.day10.Student@4554617c

     /*
      在Java中,所有的对象都是继承自Object,自然继承了toString方法,
      在当使用System.out.println()里面为一个对象的引用时,自动调用toString方法将对象打印出来。
      如果重写了tostring方法则调用重写的toString 方法。
      */
        Student s3 = new Student("小花", 23);
        System.out.println(s3);



    }
}

由上述代码中toString()方法的重写,引出了一个标准类的最终写法(3.0):

( 在第五天中曾提到了1.0和2.0写法)

一个标准类的最终写法:

1、成员变量私有化

2、构造方法(无参/所有参数)4.

3、getXxx()和setXxx()

4、toString()

(4)public boolean equals(Object obj) 

默认比较对象地址值(与==相同),若想比较对象中的具体值,可重写该方法(右键鼠标Generate自动生成)

演示:

/*
    public boolean equals(Object obj)
 */

import java.util.Objects;

class Student2 {
    public Student2() {
    }

    public Student2(String name, int age) {
        this.name = name;
        this.age = age;
    }

    String name;
    int age;

    @Override
    public boolean equals(Object o) {               //equals()方法的重写
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student2 student2 = (Student2) o;
        return age == student2.age && Objects.equals(name, student2.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}




public class ObjectDemo2 {
    public static void main(String[] args) {
        Student2 s1 = new Student2("小明",12);
        Student2 s2 = new Student2("小李",15);
        //==比较引用数据类型的时候,比较的是地址值
        System.out.println(s1==s2);  //false

        //Object类中的equals方法默认比较的是对象的地址值
        /*源码:
            public boolean equals(Object obj) {
        return (this == obj);
    }
         */
        System.out.println(s1.equals(s2));  //false
        /*
        //要想比较两个对象中的成员变量值是否一样
        //只需要自己对象所属类中重写equals方法,改写成比较成员变量值就可以了
        //自动生成即可
         */
        Student2 s3 = new Student2("小4",12);
        Student2 s4 = new Student2("小4",12);

        System.out.println(s3.equals(s4)); //true

        //拓展内容:String类中的equals也是被重写的
        String a = "hello";
        String b = new String("hello");
        System.out.println(a==b);  //false  地址值不同  

        System.out.println(System.identityHashCode(a)); //a的地址值   1163157884
        System.out.println(System.identityHashCode(b)); //b的地址值   1956725890

        System.out.println(a.equals(b));   //true  比较的是具体值,说明String类中重写了String方法
    }
}

(5)protected void finalize()

用于垃圾回收

(6)protected Object clone()

克隆/拷贝            而且是浅拷贝 

演示:

/*
    protected Object clone() 拷贝

    浅拷贝  √     元素的地址值未被拷贝,指向本身元素的地址
    深拷贝

    首先,如果此对象的类不实现接口Cloneable ,则抛出CloneNotSupportedException 。
    Cloneable中什么成员都没有,这样的接口,在java中称之为标记接口

 */
class Demo {
    int a = 20;
}

class Student3 implements Cloneable {
    String name;
    int age;
    Demo demo;

    public Student3() {
    }

    public Student3(String name, int age, Demo demo) {
        this.name = name;
        this.age = age;
        this.demo = demo;
    }

    @Override
    public String toString() {
        return "Student3{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", demo=" + demo +
                '}';
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

public class ObjerctDemo3 {
    public static void main(String[] args) throws Exception {
        Demo demo = new Demo();
        Student3 s3 = new Student3("许嵩", 18, demo);
        Object o = s3.clone();
        Student3 o1 =(Student3)o;          //由于拷贝的对象是Object类,无法获取Student3中的成员变量demo,因此向下转型

        //获取s3和克隆对象中成员变量demo的地址值,如果相同则说明该克隆为浅拷贝,不同则为深拷贝
        System.out.println(System.identityHashCode(s3.demo));      //1163157884
        System.out.println(System.identityHashCode(o1.demo));      //1163157884
        //也可以直接获取
        System.out.println(s3.demo);    //com.shujia.day10.Demo@4554617c
        System.out.println(o1.demo);    //com.shujia.day10.Demo@4554617c



    }
}

二.Scanner类概述及其构造方法

1.概述:

JDK5以后用于获取用户的键盘输入

2.构造方法:

public Scanner(InputStream source)

3.常用方法

public int nextXxx()                  //Xxx可以是Int,Double等

public String nextLine()

演示:


import java.util.Scanner;

/*
    Scanner: 其中有一个作用是获取键盘上的符号

    构造方法:
        Scanner(InputStream source)  构造一个新的 Scanner ,产生从指定输入流扫描的值。
        InputStream 字节流

    next() 获取字符串
    public String nextLine() 获取字符串 可以接收换行符
    nextInt() 获取整数

    public boolean hasNextInt() 判断管道中的下一个数据是否是整数
 */
public class ScannerDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入一个整数:");
        int s1 = sc.nextInt();
        System.out.println("请输入一个数字:");
//        int s2 = sc.nextInt();
        String s2 = sc.nextLine();          //可以接收换行符

        System.out.println("=========================================");
        System.out.println(s2);
        System.out.println(s1);


    }
}

 三.String类概述及其构造方法

1.String类概述 

字符串是由多个字符组成的一串数据(字符序列)

字符串可以看成是字符数组

2.特点

1、一旦被创建,就不能被改变

2、Java程序中的所有字符串文字(例如"abc" )都被实现为此类的实例

3、因为String对象是不可变的,它们可以被共享(常量池)

4、字符串可以被看作一个字符数组

演示:


/*
    String: 字符串 由若干个字符组成的字符序列,整体叫做字符串
    特点:
        1、一旦被创建,就不能被改变
        2、Java程序中的所有字符串文字(例如"abc" )都被实现为此类的实例。
        3、因为String对象是不可变的,它们可以被共享(常量池)
        4、字符串可以被看作一个字符数组


 */
public class StringDemo1 {
    public static void main(String[] args) {
        String s1 = "ABC";
        String s2 = "ABC";
        System.out.println(s1 == s2);  //true  地址值相同,因为String对象是不可变的,它们可以被共享(常量池)
        System.out.println("s1:"+s1);     //ABC
        System.out.println("s2:"+s2);      //ABC
        System.out.println("=====================");
        s1="hello";
        System.out.println("s1:"+s1);      //hello
        System.out.println("s2:"+s2);     //ABC
        System.out.println(s1==s2);        //false

    }
}

内存图解:

 3.String类的构造方法

public String()     

public String(String original)

public String(byte[] bytes)     将字节数组转化成字符串

public String(byte[] bytes,int offset,int length)        将字节数组的一部分转成字符串

public String(char[] value)           将字符数组转成字符串

public String(char[] value,int offset,int count)        将字符数组的一部分转成字符串

演示:

/*
    String类的构造方法:
        public String()
        public String(byte[] bytes)
        public String(byte[] bytes,int offset,int length)
        public String(char[] value)
        public String(char[] value,int offset,int count)
        public String(String original)

 */
public class StringDemo2 {
    public static void main(String[] args) {
        //public String()
        String s1 = new String();     // 相当于创建一个空的字符串
        System.out.println("s1" + s1);   // 结果为空,说明String类重写了toString()方法


        //public String(byte[] bytes) 将字节数组转化成字符串
        byte[] arr2 = {65, 66, 67, 68, 69};
        String s2 = new String(arr2);
        System.out.println(s2);     //ABCDE

        //public String(byte[] bytes,int index,int length) 将字节数组的一部分转成字符串
        String s3 = new String(arr2, 1, 2);
        System.out.println(s3);      //B,C

        //public String(char[] value)  将字符数组转成字符串
        char[] arr3 = {'断', '桥', '残', '雪'};
        String c1 = new String(arr3);
        System.out.println(c1);  //断桥残雪

        //public String(char[] value,int index,int count) 将字符数组的一部分转成字符串
        String c2 = new String(arr3, 1, 2);
        System.out.println(c2);    //桥残

        //public String(String original)
        String c3 ="hello";     //也是在创建对象(常量池)
        System.out.println(c3);
        String c4 = new String("hello");   //在堆内存创建对象,指向常量池中的"hello"
        System.out.println(c4);   //hello


    }
}

 4.String类中的判断功能

boolean equals(Object obj)           判断两个字符串内容是否相同

boolean equalsIgnoreCase(String str)        判断两个字符串内容是否相同,忽略大小写比较

boolean contains(String str)               判断一个字符串中是否包含另一个字符串

boolean startsWith(String str)           判断字符串是否以某个字符串开头

boolean endsWith(String str)          判断字符串是否以某个字符串结尾

boolean isEmpty()                    判断字符串是否为空字符串

演示:

/*String类中的判断功能:
    boolean equals(Object obj)
    boolean equalsIgnoreCase(String str)
    boolean contains(String str)
    boolean startsWith(String str)
    boolean endsWith(String str)
    boolean isEmpty()

 */
public class StringDemo3 {
    public static void main(String[] args) {
        String s1 = "Duan QIao";
        String s2 = "duan qiao";

        //boolean equals(Object obj) 判断两个字符串内容是否相同
        System.out.println(s1.equals(s2));  //false

        //boolean equalsIgnoreCase(String str)  判断两个字符串内容是否相同,忽略大小写比较
        System.out.println(s1.equalsIgnoreCase(s2));  //true

        //boolean contains(String str) 判断一个字符串中是否包含另一个字符串
        String s3 = "hello wOrlD";
        String s4 = "hell";
        System.out.println(s3.contains(s4));    //true

        //boolean startsWith(String str) 判断字符串是否以某个字符串开头
        System.out.println(s1.startsWith("Du"));    //true

        //boolean endsWith(String str) 判断字符串是否以某个字符串结尾
        System.out.println(s2.endsWith("ao"));    //true

        //boolean isEmpty() 判断字符串是否为空字符串
        System.out.println(s3.isEmpty()); //false

        System.out.println("".isEmpty()); //true


    }
}

 5.String类的获取功能

(1)   int length()         

        获取字符串中的字符个数

(2)   char charAt(int index)   

        根据索引获取索引对应的字符

(3)    int indexOf(int ch)     

         获取字符的位置

(4)    int indexOf(String str)   

         获取小字符串在大字符串中第一次出现的位置,返回小字符串第一个字符的位置索引

(5)    int indexOf(int ch,int fromIndex)

          从fromIndex位置开始找该字符,如果找到返回该字符在大字符串中的位置索引

(6)     int indexOf(String str,int fromIndex)

          从fromIndex位置开始找该字符串,如果找到返回该字符在大字符串中的位置索引

(7)     String substring(int start)      

          字符串截取 从start索引位置截取,一直到末尾

(8)    String substring(int start,int end)

         子串开始于指定beginIndex并延伸到字符索引endIndex-1

演示:

/*
    String类中的获取功能:
        int length()
        char charAt(int index)
        int indexOf(int ch)
        int indexOf(String str)
        int indexOf(int ch,int fromIndex)
        int indexOf(String str,int fromIndex)
        String substring(int start)
        String substring(int start,int end)

 */
public class StringDemo4 {
    public static void main(String[] args) {
        String s1 = "duan qiao er";

        //int length() 获取字符串中的字符个数
        System.out.println(s1.length());  //9

        //char charAt(int index) 根据索引获取索引对应的字符
        System.out.println(s1.charAt(3)); //n

        //int indexOf(int ch) 获取字符的位置
        System.out.println(s1.indexOf("a"));  //2
        //101--ASCII码:e
        //判断'e'第一次出现在字符串中的位置索引
        System.out.println(s1.indexOf(101)); //10
        System.out.println(s1.indexOf("c"));  //-1  找不到会 返回结果-1


        //int indexOf(String str) 获取小字符串在大字符串中第一次出现的位置,返回小字符串第一个字符的位置索引
        String s2= "can xuedjsquedase";
        String s3= "u";
        String s4= "y";
        System.out.println(s2.indexOf(s3)); //5
        System.out.println(s2.indexOf(s4));  //-1   找不到返回-1

        //int indexOf(int ch,int fromIndex) //从fromIndex位置开始找该字符,如果找到返回该字符在大字符串中的位置索引
        System.out.println(s2.indexOf(s3,7)); //11

        //int indexOf(String str,int fromIndex)  //从fromIndex位置开始找该字符串,如果找到返回该字符在大字符串中的位置索引
        System.out.println(s2.indexOf(s3,1));  //5

        //String substring(int start) 字符串截取 从start索引位置截取,一直到末尾
        System.out.println(s2.substring(4)); //xuedjsquedase

        //String substring(int start,int end) 子串开始于指定beginIndex并延伸到字符索引endIndex-1
        //[start,end)
        System.out.println(s2.substring(4,8));  //xued

    }
}

6.String类的转换功能 

byte[] getBytes()                   将字符串转换成字节数组

char[] toCharArray()             将字符串转换成字符数组

static String valueOf(char[] chs)      将字符数组转成字符串

static String valueOf(int i)          将数值转成字符串 100-->"100"

String toLowerCase()              转小写

String toUpperCase()             转大写

String concat(String str)          字符串拼接

演示:

/*
字符串的转换功能:
    byte[] getBytes()
    char[] toCharArray()
    static String valueOf(char[] chs)
    static String valueOf(int i)
    String toLowerCase()
    String toUpperCase()
    String concat(String str)
 */
public class StringDemo5 {
    public static void main(String[] args) {
        String s1 = "万里长城";

        //byte[] getBytes() 将字符串转换成字节数组
        byte [] arr1 = s1.getBytes();
        System.out.println(s1);   //万里长城
        System.out.println(arr1); //[B@4554617c
        for (int i = 0; i < arr1.length; i++) {
            System.out.print(arr1[i]);   //-28-72-121-23-121-116-23-107-65-27-97-114
        }

        // char[] toCharArray() 将字符串转换成字符数组
        char [] arr2=s1.toCharArray();
        System.out.println(arr2); //[B@4554617c
        for (int i = 0; i < arr2.length; i++) {
            System.out.println(arr2[i]);
        }
        //static String valueOf(char[] chs) //将字符数组转成字符串
        String sv1 = String.valueOf(arr2);
        System.out.println(sv1);     //万里长城

        //static String valueOf(int i)  将数值转成字符串  100-->"100"
        String sv2 = String.valueOf(100);
        System.out.println(sv2);     //100

        //String toLowerCase()  转小写
        String s2= "Hua Wei";
        System.out.println(s2.toLowerCase());   //hua wei

        //String toUpperCase() 转大写
        System.out.println(s2.toUpperCase());    //HUA WEI

        //String concat(String str) 字符串拼接
        String s3 = "xu song";
        String s4 = "daun qiao can xue";
        System.out.println(s3.concat(" ").concat(s4));      //xu song daun qiao can xue


    }
}

7.String类的其他功能

替换功能

String replace(char old,char new)

String replace(String old,String new)

去除字符串两空格

String trim()

按字典顺序比较两个字符串

int compareTo(String str)

int compareToIgnoreCase(String str)

演示:

/*
    替换功能
        String replace(char old,char new)
        String replace(String old,String new)
    去除字符串两空格
        String trim()
    按字典顺序比较两个字符串
        int compareTo(String str)
        int compareToIgnoreCase(String str)

 */
public class StringDemo6 {
    public static void main(String[] args) {
        String s1 = "www.张伟是混蛋.com";

        //String replace(char old,char new)  使用新字符替换旧字符
        System.out.println(s1.replace('混', '好'));    //www.张伟是好蛋.com

        //String replace(String old,String new) 使用字符串替换旧字符串
        System.out.println(s1.replace("混蛋", "好人"));   //www.张伟是好人.com

        //String trim() 去除字符串两边的空格
        String s2 = "     www.张伟是混蛋.com       ";
        System.out.println(s2.trim());       // www.张伟是混蛋.com

        //比较两个字符串内容是否相同,在java中有两种方法可以实现
        //boolean equals(String s)
        System.out.println(s1.equals(s2.trim()));     //true

        //int compareTo(String str)
        System.out.println(s1.compareTo(s2));     //87

        
        /**
         * //compareTo源码:
         *
         * class String{
         *
         *     public int compareTo(String anotherString) {
         *         // value -- "hello"
         *         // anotherString -- "hel"
         *         int len1 = value.length;
         *         int len2 = anotherString.value.length;
         *         int lim = Math.min(len1, len2);
         *         char v1[] = value;
         *         char v2[] = anotherString.value;
         *
         *         int k = 0;
         *         while (k < lim) {
         *             char c1 = v1[k]; // 'h' 'e' 'l'
         *             char c2 = v2[k]; // 'h' 'e' 'l'
         *             if (c1 != c2) {
         *                 return c1 - c2; // 104-119 = -15
         *             }
         *             k++; // 1 2 3
         *         }
         *         return len1 - len2; // 2
         *     }
         * }
         */


    }
}

8.练习

(1)把数组中的数据按照指定个格式拼接成一个字符串

         举例:int[] arr = {1,2,3}; 输出结果:[1, 2, 3]

public class StringTest1 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        String str = "[";
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                str = str.concat(arr[i]+"]");
            }else {
                str = str.concat(arr[i]+",");
            }
        }

        System.out.println(str);
    }
}

(2)字符串反转

    举例:键盘录入”abc” 输出结果:”cba”

public class StringTest2 {
    public static void main(String[] args) {
        String s = "我爱中国";
        //方案1:字符串拼接
        String res = "";
        for (int i = s.length() - 1; i >= 0 ;i--){
            res = res.concat(String.valueOf(s.charAt(i)));
        }
        System.out.println(res);

    }
}

(3) 统计大串中小串出现的次数

举例:在字符串” woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun”中java出现了5次

/*
    统计大串中小串出现的次数
    举例:在字符串” woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun”中java出现了5次

    分析:
        1、可以使用indexOf()方法获取小串第一次出现的位置
        2、使用subString()截取每次java的后续剩余字符串,继续查找
        3、因为不知道次数,使用while循环
 */
public class StringTest1 {
    public static void main(String[] args) {

        String s1 = "gdkenandsuahduisagdy usakenanhdiuyehaiuhkenangdasyugdyusagdkenanhdsajk";
        String s2 = "kenan";
        int count = 0;
        int i = s1.indexOf(s2);  //2   从索引7开始截取
        while (i != -1) {
            count++;
            s1 = s1.substring(i + s2.length());
            i=s1.indexOf(s2);
        }
        System.out.println(count);

    }
}

 四.StringBuffer类概述及其构造方法

1.StringBuffer类概述

我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时又浪费空间,而StringBuffer就可以解决这个问题

2.构造方法

public StringBuffer()                               创建一个空的StringBuffer容器

public StringBuffer(int capacity)              创建指定大小容量的容器

public StringBuffer(String str)                  创建StringBuffer的同时,内部就包含了一个初始字符串

演示: 


public class StringBufferDemo1 {
    public static void main(String[] args) {
        // public StringBuffer()  创建一个空的StringBuffer容器
        StringBuffer sb1 = new StringBuffer();

        // public int capacity() 返回当前容量
        System.out.println(sb1.capacity());

        //public int length() 返回长度(字符数)。
        System.out.println(sb1.length());
        System.out.println("sb1:"+sb1);// StringBuffer重写了toString()
//
//        //public StringBuffer(int capacity) 创建指定大小容量的容器
        StringBuffer sb2 = new StringBuffer(30);
        System.out.println(sb2.capacity());
        System.out.println(sb2.length());
//
//        //public StringBuffer(String str) 创建StringBuffer的同时,内部就包含了一个初始字符串

        StringBuffer sb3 = new StringBuffer("xusong");
        System.out.println(sb3); //xusong
        System.out.println(sb3.capacity()); // 22
        System.out.println(sb3.length()); // 6

    }
}

 

 3.StringBuffer类的成员方法

添加功能

public StringBuffer append(String str)

public StringBuffer insert(int offset,String str)

删除功能

public StringBuffer deleteCharAt(int index)

public StringBuffer delete(int start,int end)

替换功能

public StringBuffer replace(int start,int end,String str)

反转功能    

public StringBuffer reverse()

演示:

/*
    添加功能
        public StringBuffer append(String str)
        public StringBuffer insert(int offset,String str)
    删除功能
        public StringBuffer deleteCharAt(int index)
        public StringBuffer delete(int start,int end)
    替换功能
        public StringBuffer replace(int start,int end,String str)
    反转功能
        public StringBuffer reverse()
 */
public class StringBufferDemo2 {
    public static void main(String[] args) {
        //public StringBuffer append(String str) 追加
        //无论添加的是什么类型的元素值,只要进入到StringBuffer中,它就是一个一个的普通字符
        StringBuffer sb1 = new StringBuffer("xia");
        String s2="xue";
        System.out.println(sb1.append(" ").append(s2));  //xia xue

        //public StringBuffer insert(int index,String str) 在StringBuffer容器中指定位置添加字符串
        System.out.println(sb1.insert(0, "ming tian "));   //ming tian xia xue

        //public StringBuffer deleteCharAt(int index) 删除指定位置索引上的字符
        StringBuffer sb3 = new StringBuffer("你 好 啊");
        sb3.deleteCharAt(2);
        System.out.println(sb3);       //你  啊

        //public StringBuffer delete(int start,int end)   [start,end)
        System.out.println(sb3.delete(2, 5));     //你

        //public StringBuffer replace(int start,int end,String str)   [start,end)
        System.out.println(sb3.replace(1,5,"太棒l"));  //你太棒l

        //public StringBuffer reverse()   //反转
        System.out.println(sb3.reverse());   //l棒太你
    }
}

截取功能 

 public String substring(int start)

 public String substring(int start,int end)

 截取功能和前面几个功能的不同:返回值类型是String类型,本身没有发生改变

演示:

/*
    截取功能
    public String substring(int start)
    public String substring(int start,int end)

 */
public class StringBufferDemo3 {
    public static void main(String[] args) {
        //   public String substring(int start)
        StringBuffer sb1 = new StringBuffer("xusong");
        System.out.println(sb1.substring(1));   //usong
//        String s1 = "xusong";
//        System.out.println(s1.substring(1));      //usong

        //public String substring(int start,int end)
        System.out.println(sb1.substring(1,3));      //us

    }
}

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1487185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言数组作为函数参数

有两种情形&#xff1b; 一种是数组元素作为函数实参&#xff1b;一种是数组名作为函数参数&#xff1b; 新建一个VC6单文档工程&#xff1b; void printshz(int , CDC* , int , int ); double getav(int a[5]); ...... void CShzcshView::OnDraw(CDC* pDC) {CShzcshDoc* pDo…

pycharm 自定义TODO类注释以及其高亮颜色

大体介绍 使用自定义TODO是为了方便看&#xff0c;并且快速定位到位置 上面是为了进行标记&#xff0c;下面是让哪些标记可以过滤掉&#xff08;自定义过滤规则&#xff09;&#xff0c;从而在pycharm下面的TODO可以显示并过滤 如何设置&#xff1f; Setting-Preferences-Ed…

华为配置攻击检测功能示例

配置攻击检测功能示例 组网图形 图1 配置攻击检测功能示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 企业用户通过WLAN接入网络&#xff0c;以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时&#xff0c;不影响用户的业务使用。…

AutoSar PWM配置详解

背景 芯片:AURIX TC3xx 软件:Vector DaVinci CFG(简称达芬奇) 目标:配置AURIX TC3xx的P34.4脚为30HZ的PWM输出 配置过程 1.AUTOSAR架构 下图显示了PWM在AUTOSAR架构中的位置&#xff0c;在MCAL区。 2.Port模块配置 主要配置Port的输出模式与输出类型。 查看手册 配置P…

2024.3.1 网络编程

1.思维导图 2.TCP机械臂测试 程序代码&#xff1a; #include <myhead.h> #define SER_IP "192.168.125.254" //服务器端IP #define SER_PORT 8888 //服务器端端口号#define CLI_IP "192.168.199.131" //客户端IP …

一二三文档管理系统整体介绍

系统简介 企事业单位一站式文档管理系统&#xff0c;让组织内文档管理有序&#xff0c;协作高效、安全可控。 本应用完全开源&#xff0c;开源协议为MIT。 本应用基于一二三应用开发平台构建&#xff0c;该平台完全开源&#xff0c;开源协议为MIT&#xff0c;传送门。 系统特…

VMware 虚拟机安装windows 10操作系统

先提前准备好镜像文件 1.创建新的虚拟机 2.选择自定义&#xff0c;然后下一步 v Windows 建议选择2G以上&#xff0c;下一步 选择网络地址转换&#xff08;NAT&#xff09;&#xff0c;下一步 这里可按自己的需求来分区&#xff0c;也可以安装好后再分区 选择立即重启&#xff…

【心理】程序人生之情绪与压力篇,附心理学相关证书备考指南(心理学312统考,心理治疗师,中科院心理咨询师,家庭教育指导师,企业培训证书)

程序员生活指南&#xff08;情绪与压力篇&#xff09;之 【心理】程序人生之情绪与压力专项&#xff0c;附心理学相关证书备考指南&#xff08;心理学312统考&#xff0c;心理治疗师&#xff0c;中科院心理咨询师&#xff0c;家庭教育指导师&#xff0c;企业培训证书&#xff0…

3.3日学习打卡----初学Redis(一)

3.3日学习打卡 目录&#xff1a; 3.3日学习打卡NoSQL为什么要用NoSQL什么是NoSQL?NoSQL的四大分类关系型数据库和非关系型数据及其区别NoSQL经典应用 RedisRedis是什么?Linux下安装RedisDocker下安装Redis基本知识 NoSQL 为什么要用NoSQL 单机Mysql的美好年代 在90年代&…

【排序】基于快速选择算法的快排实现

目录 一、常用排序算法比较 二、快速选择算法 快速选择 图解快速选择 三、代码实现 一、常用排序算法比较 排序 时间复杂度 空间复杂度 稳定性 插入排序 O(n) O(1) 稳定 希尔排序 O(nlogn)-O(n)取决于增量序列 O(1) 不稳定 选择排序 O(n) O(1) 不稳定 冒泡…

0.8秒一张图40hx矿卡stable diffusion webui 高质极速出图组合(24.3.3)

新消息是。经过三个月的等待&#xff0c;SD Webui (automatic1111)终于推出了新版本1.8.0&#xff0c;本次版本最大的更新&#xff0c;可能就是pytorch更新到2.1.2, 不过还是晚了pytorch 2.2.2版。 不过这版的一些更新&#xff0c;在forget分支上早就实现了&#xff0c;所以。…

Get Your Back Covered! Coverage, CodeCov和Tox

1. Coverage - 衡量测试的覆盖率 我们已经掌握了如何进行单元测试。接下来,一个很自然的问题浮现出来,我们如何知道单元测试的质量呢?这就提出了测试覆盖率的概念。覆盖率测量通常用于衡量测试的有效性。它可以显示您的代码的哪些部分已被测试过,哪些没有。 coverage.py …

市场复盘总结 20240301

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率中 40% 最常用的…

dubbo 与 zk 小结

zk官方注册中心&#xff08;mulicast zk nacos redis&#xff09; reference 远程调用 消费者 从zookeeper获取 访问url 注册中心挂了&#xff0c;服务正常访问&#xff1a; 消费者第一次调用将提供方缓存到本地&#xff0c;调用不再访问注册中心 提供者地址改变&#xff0c;…

金南瓜通讯--SECS/GEM程式配方管理recipe是什么

配方在SECS里面成为PPID&#xff0c;叫成recipe 配方有什么用&#xff1f; 设备在针对每款产品&#xff0c;都需要不同的加工工艺&#xff0c;这个加工工艺参数统称配方recipe SECS/GEM对配方描述是什么&#xff1f; process program --- process program is the pre-plann…

猴子吃桃问题(python版)

文章预览&#xff1a; 题目python解法一&#xff1a;运行结果 python解法二&#xff1a;运行结果 python解法三&#xff1a;运行结果 题目 猴子吃桃问题&#xff1a;猴子第一天摘下若干个桃子&#xff0c;当即吃了一半&#xff0c;还不过瘾&#xff0c;又多吃了一个。 第二天早…

04-prometheus服务的动态发现

一、概述 目前&#xff0c;我们每增加一个被监控的节点&#xff0c;就需要修改prometheus的配置文件&#xff0c;然后重新加载prometheus服务&#xff0c;这种方式比较繁琐&#xff0c;每次新增、删除被监控节点都需要重新操作一遍&#xff0c;不适合生产环境的大规模监控架构&…

回归预测 | Matlab实现RIME-BP霜冰算法优化BP神经网络多变量回归预测

回归预测 | Matlab实现RIME-BP霜冰算法优化BP神经网络多变量回归预测 目录 回归预测 | Matlab实现RIME-BP霜冰算法优化BP神经网络多变量回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现RIME-BP霜冰算法优化BP神经网络多变量回归预测&#xff08;完整…

yolov5训练太慢的解决方案

问题原因 训练太慢大多是因为没有安装CUDA和pytorch&#xff0c;导致的只有cpu在跑&#xff0c;显卡没跑 这就是很典型的。 解决方案 第一步&#xff1a;安装CUDA 在本机上面安装CUDA,记住只有N卡可以安装&#xff0c;一开始的电脑是自带CUDA的。 如果不是自带的CUDA&…

MATLAB知识点:for循环的七道经典例题

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自​第4章&#xff1a;MATLAB程序流程控制 &#xff08;…