Day13练习

本文详细解析StringBuffer类的API方法,包括容量、长度、字符串添加、插入、删除、替换和反转,同时探讨String与StringBuffer之间的转换,以及它们在实际开发中的使用场景。此外,还包括基本类型转换、StringBuffer实例操作和常见编程练习。
摘要由CSDN通过智能技术生成

A:简答题

1、把StringBuffer类中上课讲解的方法在API中进行查询,并用自己的话进行描述

public int capacity()
返回当前的容量 理论值
public int length() 
返回长度(字符数) 实际值
public StringBuffer append(String str) 
添加字符串str到字符串缓冲区 并返回字符串缓冲区本身
public StringBuffer insert(int offset,String str) 
在offset位置插入字符串str到字符串缓冲区 并返回本身
public StringBuffer deleteCharAt(int index) 
删除索引为index的字符 并返回本身
public StringBuffer delete(int start,int end) 
删除从索引start到end的内容 并返回本身
public StringBuffer replace(int start,int end,String str) 
用字符串str替换从start到end的内容(start,end]
public StringBuffer reverse() 
反转字符串
public String substring(int start) 
截取从索引start到末尾的内容
public String substring(int start,int end) 
截取从索引start到end的内容

2、如何实现StringBuffer和String的相互转换?

StringBuffer -> String
    StringBuffer sb = new StringBuffer("hello");
1.构造方法
    String s = new String(sb);
2.toString方法
    String toString = sb.toString();
3.substring方法
    String substring = sb.substring(0);
    
String -> StringBuffer
	String s = "hello";
1.构造方法
	StringBuffer sb = new StringBuffer(s);
2.append方法
	StringBuffer append = new StringBuffer().append(s);
3.insert方法	
	StringBuffer insert = new StringBuffer().insert(0,s);

3、如何实现String和int数据的相互转换

String -> int
	String s = "123";
1.静态方法parseInt
	int i = Integer.parseInt(s);
2.非静态方法intValue
	Integer integer = new Integer(s);
	int i1 = integer.intValue();

int -> String
	int i = 123;
1.拼接空字符串
	String s = i + "";
2.toString方法
	String toString = Integer.toString(i);
3.valueOf方法
	String s1 = String.valueOf(i);

4、如何实现 基本数据类型 与 基本数据封装类 之间的相互转换

int i = 123;
手动装箱:Integer integer = Integer.valueOf(i);
手动拆箱:int i1 = integer.intValue();

jdk1.5之后
自动装箱:Integer integer = i;
自动拆箱:int i1 = integer;

5、请说明String与StringBuffer二者之间的区别?

String类型传递的是字符的值
StringBuffer类型传递的是地址值
String适用于少量的字符串操作
StringBuffer适用于字符串缓冲区进行大量操作

6、请说明StringBuffer与StringBilder二者之间的区别?

StringBuffer
线程安全
多线程在字符串缓冲区进行大量操作
StringBuilder
非线程安全
单线程在字符串缓冲区进行大量操作

B:看程序写结果(写出自己的分析理由),程序填空,改错,看程序写结果。

1、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。

class Demo {
    public void method(StringBuffer sb) {
        sb.append("StringBuffer");
    }

    public void method(String str) {
        str = str + "String";
    }

    public static void main(String[] args) {
        String str = new String("java");
        StringBuffer buffer = new StringBuffer("android");

        Demo d = new Demo();
        d.method(str);
        System.out.println(str);
        d.method(buffer);
        System.out.println(buffer);
    }
}
/*
java
androidStringBuffer
*/

2、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。

class Demo {
    public static void main(String[] args) {
        if ("String".endsWith("")) {
            System.out.println("True");
        } else {
            System.out.println("False");
        }
    }
}
/*
True
*/

3、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。

class Demo {
    public static void main (String[] args) {
        if ("String".startsWith("")) {
            System.out.println("True");
        } else {
            System.out.println("False");
        }
    }
}
/*
True
*/

4、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。

class Demo {
    public static void main(String[] args) {
        StringBuffer buffer1 = new StringBuffer("String");
        StringBuffer buffer2 = new StringBuffer("String");
        if (buffer1.equals(buffer2)) {
            System.out.println("True");
        } else {
            System.out.println("False");
        }
    }
}
/*
False
StringBuffer没有重写equals方法
*/

5、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。

class Demo {
    public static void main (String[] args) {
        StringBuffer buffer1 = new StringBuffer("abc");
        StringBuffer buffer2 = new StringBuffer("abc");
        String s1 = new String("abc");
        String s2 = "abc";

        System.out.println(s1 == s2);
        System.out.println(s1 = s2);
        System.out.println(buffer1 == buffer2);
        System.out.println(buffer1.equals(buffer2) );
    }
}
/*
false 地址值不同
abc   赋值
false 地址值不同
false 地址值不同
*/

6、将下面的程序补充完整

class Demo {
    public static void main(String[] args) {
        StringBuffer buffer = new StringBuffer("Hello");
        //向StringBuffer对象中添加新数据"World"
        __________________;
        //向StringBuffer对象Hello与World之间插入"Java"
        __________________;
        //把StringBuffer对象中"World"删除
        __________________;
        //把StringBuffer对象中"Hello" 更改成"Hi" 
        __________________;
        System.out.println(buffer.toString());
    }
}
/*
1.buffer.append("World");
2.buffer.insert(buffer.indexOf("W"),"java");
3.buffer.delete(buffer.indexOf("W"),buffer.indexOf("d")+1);
4.buffer.replace(buffer.indexOf("H"),buffer.indexOf("j"),"Hi");

HelloWorld
HellojavaWorld
Hellojava
Hijava
*/

7、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。

class Demo {
    public static void main(String[] args) {
        Integer i = 100;
        Integer j = 100;
        System.out.println(i == j);

        Integer i2 = 200;
        Integer j2 = 200;
        System.out.println(i2 == j2);
    }
}
/*
true
false
*/

8、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。

class Demo {
    public static void main(String[] args){
        Integer a1 = Integer.valueOf(100);
        Integer b1 = Integer.valueOf(100);
        System.out.println( a1 == b1 );

        Integer a2 = Integer.valueOf(156);
        Integer b2 = Integer.valueOf(156);
        System.out.println( a2 == b2 );
    }
}
/*
true
false
*/

C:编程题

1、 请编写数组工具类,完成冒泡排序、选择排序、二分查找,并测试

import java.util.Arrays;
public class Test {
    public static void main(String[] args) {
        int[] arr = {20,14,23,55,31,1};
        //冒泡排序
        ArraysUtils.bubbleSor(arr);
        System.out.println(Arrays.toString(arr));
        //选择排序
        ArraysUtils.selectionSort(arr);
        System.out.println(Arrays.toString(arr));
        //二分查找
        int[] arr1 = {1,2,3,4,5,6,7,8,9};
        int i = ArraysUtils.binarySearch(arr1, 3);
        System.out.println(i);

    }
}
/*
[1, 14, 20, 23, 31, 55]
[1, 14, 20, 23, 31, 55]
2
*/

//数组工具类
public class ArraysUtils {
    private ArraysUtils() {
    }

    //冒泡排序
    public static void bubbleSor(int[] arr) {
        //外层循环控制轮数
        for (int i = 0; i < arr.length - 1; i++) {
            //内层循环控制比较次数
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    int t = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = t;
                }
            }
        }
    }

    //选择排序
    public static void selectionSort(int[] arr) {
        //外层循环控制轮数
        for (int index = 0; index < arr.length - 1; index++) {
            //内层循环控制比较次数
            for (int j = 1 + index; j < arr.length; j++) {
                if (arr[index] > arr[j]) {
                    int temp = arr[index];
                    arr[index] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }

    //二分查找
    public static int binarySearch(int[] arr, int ele) {
        //数组元素必须有序
        int minIndex = 0;//左侧元素索引
        int maxIndex = arr.length - 1;//右侧元素索引
        int centerIndex = (minIndex + maxIndex) / 2;//中间元素索引

        while (minIndex <= maxIndex) {
            if (ele == arr[centerIndex]) {
                return centerIndex;
            }
            if (ele > arr[centerIndex]) {
                minIndex = centerIndex + 1;
            }
            if (ele < arr[centerIndex]) {
                maxIndex = centerIndex - 1;
            }
            centerIndex = (minIndex + maxIndex) / 2;
        }

        return -1;
    }
}

2、 请默写出快速排序的代码

import java.util.Arrays;
public class Homework02 {
    public static void main(String[] args) {
        int[] arr = {20, 14, 23, 55, 31, 1};
        //快速排序
        quickSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
        //[1, 14, 20, 23, 31, 55]
    }

    public static void quickSort(int[] arr, int start, int end) {
        if (start < end) {
            //查找基准数的索引
            int index = getIndex(arr, start, end);
            //对左右分区进行递归调用
            quickSort(arr, start, index - 1);
            quickSort(arr, index + 1, end);
        }
    }

    private static int getIndex(int[] arr, int start, int end) {
        int i = start;
        int j = end;
        //找出基准数 挖第一个坑
        int x = arr[i];

        while (i < j) {
            //由右向左找 若比x大或等于 则一直查找
            while (i < j && x <= arr[j]) {
                j--;
            }
            //填坑
            if (i < j) {
                arr[i] = arr[j];
                i++;
            }
            //由左向右找 若比x小 则一直查找
            while (i < j && x > arr[i]) {
                i++;
            }
            //填坑
            if (i < j) {
                arr[j] = arr[i];
                j--;
            }
        }
        //将基准数填入最后一个坑 i和j相等
        arr[i] = x;
        return i;
    }
}

3、 请默写出插入排序的代码

import java.util.Arrays;
public class Homework03 {
    public static void main(String[] args) {
        int[] arr = {20, 14, 23, 55, 31, 1};
        //插入排序
        insertionSort(arr);
        System.out.println(Arrays.toString(arr));
        //[1, 14, 20, 23, 31, 55]
    }

    private static void insertionSort(int[] arr) {
        //控制循环轮数
        for (int i = 1; i < arr.length; i++) {
            //若后面元素比前面元素大 则继续向前比较
            for (int j = i; j > 0; j--) {
                //后面元素比前面元素小 则交换
                if (arr[j] < arr[j - 1]) {
                    int t = arr[j];
                    arr[j] = arr[j - 1];
                    arr[j - 1] = t;
                }
            }
        }
    }
}

4、 请至少再去学习一种排序算法,下次上课我要让你讲出排序原理,以及默写出代码

public static void main(String[] args) {
    int[] arr = {20, 14, 23, 55, 31, 1};
    //希尔排序
    XiEr(arr);
    System.out.println(Arrays.toString(arr));
    //[1, 14, 20, 23, 31, 55]
}

private static void XiEr(int[] arr) {
    //找到增量值gap gap每次减半 直到为1
    for (int gap = arr.length / 2; gap > 0; gap /= 2) {
        //找到索引为0 对应gap的元素
        //每次向后自加 与自己相对应的gap元素进行比较
        //通过插入排序进行更换
        for (int i = gap; i < arr.length; i++) {
            for (int j = i; j >= gap; j-=gap) {
                if (arr[j] < arr[j-gap]){
                    int t = arr[j];
                    arr[j] = arr[j-gap];
                    arr[j-gap] = t;
                }
            }
        }
    }
}

5、 请对电子邮箱的格式进行校验

public class Homework05 {
   public static void main(String[] args) {
       //对网易邮箱格式的校验
       String email = "asdqwe@163.com";
       //6~18 个字符,可使用字母、数字、下划线,需要以字母开头
       String emailRegx = "[a-zA-Z]\\w{5,17}@163\\.com";
       boolean matches = email.matches(emailRegx);
       System.out.println(matches);
       //true
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值