Java高级编程day19【谷】

Java高级编程day19

String常见算法题

1.模拟一个trim方法,去除字符串两端的空格。

@Test
//1.模拟一个trim方法,去除字符串两端的空格。
public void demo1() {
    int index = -1;
    int end = -1;
    String str = "  gao  you d ao";
    System.out.println(str.trim());
    char[] chars = str.toCharArray();
    if (chars[0] == ' ') {
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] != ' ') {
                index = i;
                break;
            }
        }
    }
    if (chars[chars.length - 1] == ' ') {
        for (int i = chars.length - 1; i > -1; i--) {
            if (chars[i] != ' ') {
                end = i;
                break;
            }
        }
    }
    if (index == -1 && end == -1) {
        System.out.println(str);
    } else if (index == -1) {
        System.out.println(str.substring(0, end));
    } else if (end == -1) {
        System.out.println(str.substring(index));
    } else {
        System.out.println(str.substring(index, end));
    }

}

2.将一个字符串进行反转。将字符串中指定部分进行反转。比如“abcdefg”反转为’abfedcg”

    @Test
    //将一个字符串进行反转。将字符串中指定部分进行反转。比如“abcdefg”反转为'abfedcg”
    public void demo2() {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入字符序列:");
        String str = sc.next();
        System.out.println(str);
        System.out.println("输入反转的起始序号:");
        int start = sc.nextInt();
        System.out.println("输入反转的结束序号:");
        int end = sc.nextInt();
/* 方式一
       char[] chars = str.toCharArray();
        for (int i = start,j=end; i<j; i++,j--) {
            char temp = chars[i];
            chars[i] = chars[j];
            chars[j] = temp;
        }
        System.out.println(chars);
        sc.close();*/
        //方式二
       /* String s1=str.substring(0,start);
        String s2=str.substring(end+1);
        for (int i = end; i >=start ; i--) {
            s1+=str.charAt(i);
        }
        s1+=s2;
        System.out.println(s1);*/
        //方式三
        StringBuilder s1 = new StringBuilder(str.substring(0, start));
        String s2 = str.substring(end + 1);
        for (int i = end; i >= start; i--) {
            s1.append(str.charAt(i));
        }
        s1.append(s2);
        System.out.println(s1);
    }

3.获取一个字符串在另一个字符串中出现的次数。比如:获取“ab”在“abkkcadkabkebfkabkskab”中出现的次数

@Test
    //3.获取一个字符串在另一个字符串中出现的次数。比如:获取“ab”在“abkkcadkabkebfkabkskab”中出现的次数
    public void demo3() {
        int total = 0;
        String str = "aaaaaaaaa";
        String s="aa";
                //String str = "ababababababab";
        int index = str.lastIndexOf("aa");
        if (index != -1) {
            while (true) {
                if (index != -1) {
                    index = str.lastIndexOf("aa", index - s.length());
                    total++;
                } else {
                    break;
                }

            }
        }
        System.out.println(total);

    }

4.获取两个字符串中最大相同子串。比如:str1= “abcwerthelloyuiodef”;str2=“cvhellobnm”
提示:将短的那个串进行长度依次递减的子串与较长的串比较。

public void demo4() {
    String str1 = "abcwerthelloyuiodef";
    String str2 = "cvhellobnm";
    String maxStr = (str1.length() >= str2.length()) ? str1 : str2;
    String minStr = (str1.length() < str2.length()) ? str1 : str2;
    for (int i = 0; i < minStr.length(); i++) {
        for (int j = 0,x=minStr.length()-i; x <=minStr.length() ; j++,x++) {
            String newString = minStr.substring(j, x);
            if (maxStr.contains(newString)) {
                System.out.println(newString);
                return;
            }
        }
    }
}

SimpleDateFormat

SimpleDateFormat可以使用空参构造器来创建对象,但模板将固定,例如:22-7-26 下午1:18

格式化:format方法会将日期===》字符串类型,变为构造器模板的值

解析:parse方法要与构造器使用的模板一致,格式化逆过程 ,字符串类型===》日期

SimpleDateFormat可以使用有参构造器来自定义模板创建对象 例如:yyyy-MM-dd hh:mm:ss

public void test() throws ParseException {
    //SimpleDateFormat可以使用空参构造器来创建对象,但模板将固定,例如:22-7-26 下午1:18
    SimpleDateFormat sdf = new SimpleDateFormat();
    Date date = new Date();
    String format = sdf.format(date);
    System.out.println(format);
    //parse方法要与构造器使用的模板一致
    Date parse = sdf.parse("20-2-81 下午1:18");
    System.out.println(parse);
    //SimpleDateFormat可以使用自定义的模板构造器来创建对象
    SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    String format1 = sdf1.format(date);
    System.out.println(format1);
    Date parse1 = sdf1.parse("2000-9-5 22:22:22");
    System.out.println(parse1);
    System.out.println(sdf.format(parse1));
}

练习:字符"2020-09-08"转换为java.sql.Date

public void test1() throws ParseException {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date time = sdf.parse("2020-09-08");
    java.sql.Date date = new java.sql.Date(time.getTime());
    System.out.println(date);
}

Calendar

Calendar日历类是抽象类,不能通过new来创建实例,有两种方式

第一种,直接new子类,GregorianCalendar

第二种,通过类名调用静态方法getInstance()

get(对象.静态属性)

set(对象.静态属性,需要设置的值)

add(对象.静态属性,需要设置的值) 将属性做加减运算

setTime()设置日期

getTime()得到日期

注意:

获取月份时:一月是0,二月是1,以此类推,12月是11

获取星期时:周日是1,周二是2,。。。。周六是7

public void test2(){
    //Calendar日历类是抽象类,不能通过new来创建实例,有两种方式
    //第一种,直接new子类,GregorianCalendar
    //第二种,通过类名调用静态方法getInstance()

    Calendar calendar = Calendar.getInstance();
    //System.out.println(calendar.getClass());
    //get(对象.静态属性)
    System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
    //set(对象.静态属性,需要设置的值)
    calendar.set(Calendar.DAY_OF_MONTH,5);
    System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
    Date date = new Date();
    calendar.setTime(date);
    System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
    System.out.println(calendar.getTime());
    calendar.add(Calendar.DAY_OF_MONTH,1);
    System.out.println(calendar.get(Calendar.DAY_OF_MONTH));

}

JDK8中日期时间API的测试

LocalDate LocalTime LocalDateTime的使用

LocalDateTime使用频率最高

now():获取当前的日期 时间 日期+时间

of():设置为指定的年 月 日 时 分 秒。没有偏移量,设置什么就是什么

getXxx():获取你想要的值

withXxx():设置值,体现不可变性

plusXxx():加,体现不可变性

minusXxx():减

Instant(瞬时)

类似于java.util.Date类

now():获取本初子午线对应的标准时间

atOffset():添加时间的偏移量

toEpochMilli():获取自1979年1月1日8时9分9秒(UTC)开始的毫秒数

ofEpochMilli():通过给定的毫秒数,获取Instant实例----->Date(long millis)

DateTimeFormatter

自定义的格式如 ofPattern(“yyyy-MM-dd hh:mm:ss”)

自定义类实现Comparable:自然排序

Comparable接口的使用举例:自然排序
1.string、包装类等实现了ComparabLe接口,重写了compareTo(obj)方法,给出了比较两个对亲
2.istring、包装类重写compareTo()方法以后,进行了从小到大的排列
3.里写compareTo(obj)的规则:
如果当前对象this大于形参对象obj,则返回正整数,
如果当前对象this小于形参对象obj,则返回负整数,
如果当前对象this等于形参对象obj,则返回零。

4.对于自定义类来说,如果需要排序,我们可以让自定义类实现ComparabLe接口,重写compareTo()方法,在compareTo(obj)方法中指明如何排序

如果是自定义类数组,当实现Comparable接口,重写了CompareTo方法,就可以使用Arrays.sort()进行排序

Comparator接口的使用:定制排序

1.背景:
当元素的类型没有实现java.lang.ComparabLe:接口而又不方便修改代码,
或者实现了java.lang.ComparabLe.接口的排序规则不适合当前的操作,
那么可以考虑使用Comparator的对象来排序
2.重写compare(Object o1,0 oject o2)方法,此较o1和o2的大小:
如果方法返回正整数,则表示o1大于o2:
如果返回0,表示相等:
返回负整数,表示o1小于o2。

System类

百度

Math类

BigInteger和BigDecimal

BigInteger:整型,很大

BigDecimal:浮点型,精度比较高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值