Math

  1. abs绝对值

  2. pow求幂

  3. ceil向上取整

  4. floor向下取整

  5. round四舍五入

  6. sqrt求开方

  7. random求随机数

思考:
请写出获取a-b之间的一个随机整数,a,b均为整数?2-7

  1. max求两个数的最大值

  2. min求两个数的最小值

方法学习

//看看Math常用的方法(静态方法)//1.abs 绝对值int abs = Math.abs(-9);System.out.println(abs);//9//2.pow 求幂double pow = Math.pow(2, 4);//2的4次方System.out.println(pow);//16//3.ceil 向上取整,返回>=该参数的最小整数(转成double);double ceil = Math.ceil(3.9);System.out.println(ceil);//4.0//4.floor 向下取整,返回<=该参数的最大整数(转成double)double floor = Math.floor(4.001);System.out.println(floor);//4.0//5.round 四舍五入  Math.floor(该参数+0.5)long round = Math.round(5.51);System.out.println(round);//6//6.sqrt 求开方double sqrt = Math.sqrt(9.0);System.out.println(sqrt);//3.0//7.random 求随机数//  random 返回的是 0 <= x < 1 之间的一个随机小数// 思考:请写出获取 a-b之间的一个随机整数,a,b均为整数 ,比如 a = 2, b=7//  即返回一个数 x  2 <= x <= 7// 老韩解读 Math.random() * (b-a) 返回的就是 0  <= 数 <= b-a// (1) (int)(a) <= x <= (int)(a + Math.random() * (b-a +1) )// (2) 使用具体的数给小伙伴介绍 a = 2  b = 7//  (int)(a + Math.random() * (b-a +1) ) = (int)( 2 + Math.random()*6)//  Math.random()*6 返回的是 0 <= x < 6 小数//  2 + Math.random()*6 返回的就是 2<= x < 8 小数//  (int)(2 + Math.random()*6) = 2 <= x <= 7// (3) 公式就是  (int)(a + Math.random() * (b-a +1) )for(int i = 0; i < 100; i++) {System.out.println((int)(2 +  Math.random() * (7 - 2 + 1)));}//max , min 返回最大值和最小值int min = Math.min(1, 9);int max = Math.max(45, 90);System.out.println("min=" + min);System.out.println("max=" + max);

Random

        Random random = new Random();//输出2 - 7之间的随机数。包含//nextInt(6),输出的是 0-5之间的//如果是包含:nextInt(6) + 2//输出 X - Y 之间的 随机数。 随机(Y - X) + X,因为next是 不包含最后(Y - X),还要 +1//即:随机(Y - X+1)+ X//如生成 2-7包含。那就是 随机(7-2+1) + 2//如果生成3-6包含。那就是:随机(6-3+1)+ 3for (int i = 0; i < 10; i++) {int x = random.nextInt(4) + 3;System.out.println(x);}//Math.random() 生成 0-1之间的随机数,不包含1。0 <= x < 1//生成 2-7 包含。那就是:生成<=5 + 2。具体为 random(6) +2for (int i = 0; i < 20; i++) {int r = new Double(Math.random() * 6).intValue() + 2;System.out.println(r);}// (3) 公式就是  (int)(a + Math.random() * (b-a +1) )

Arrays

    public static String toString(int[] a) {if (a == null)return "null";int iMax = a.length - 1;if (iMax == -1)return "[]";StringBuilder b = new StringBuilder();b.append('[');for (int i = 0; ; i++) {b.append(a[i]);if (i == iMax)return b.append(']').toString();b.append(", ");}}

排序 Comparator

binarySort 二叉树排序

底层调用了,你实现的 compare方法

        Integer[] integers = {1, 20, 90};//遍历数组
//        for(int i = 0; i < integers.length; i++) {//            System.out.println(integers[i]);
//        }//直接使用Arrays.toString方法,显示数组
//        System.out.println(Arrays.toString(integers));////演示 sort方法的使用Integer arr[] = {1, -1, 7, 0, 89};//进行排序//老韩解读//1. 可以直接使用冒泡排序 , 也可以直接使用Arrays提供的sort方法排序//2. 因为数组是引用类型,所以通过sort排序后,会直接影响到 实参 arr//3. sort重载的,也可以通过传入一个接口 Comparator 实现定制排序//4. 调用 定制排序 时,传入两个参数 (1) 排序的数组 arr//   (2) 实现了Comparator接口的匿名内部类 , 要求实现  compare方法//5. 先演示效果,再解释//6. 这里体现了接口编程的方式 , 看看源码,就明白//   源码分析//(1) Arrays.sort(arr, new Comparator()//(2) 最终到 TimSort类的 private static <T> void binarySort(T[] a, int lo, int hi, int start,//                                       Comparator<? super T> c)()//(3) 执行到 binarySort方法的代码, 会根据动态绑定机制 c.compare()执行我们传入的//    匿名内部类的 compare ()//     while (left < right) {//                int mid = (left + right) >>> 1;//                if (c.compare(pivot, a[mid]) < 0)//                    right = mid;//                else//                    left = mid + 1;//            }//(4) new Comparator() {//            @Override//            public int compare(Object o1, Object o2) {//                Integer i1 = (Integer) o1;//                Integer i2 = (Integer) o2;//                return i2 - i1;//            }//        }//(5) public int compare(Object o1, Object o2) 返回的值>0 还是 <0//    会影响整个排序结果, 这就充分体现了 接口编程+动态绑定+匿名内部类的综合使用//    将来的底层框架和源码的使用方式,会非常常见//Arrays.sort(arr); // 默认排序方法//定制排序Arrays.sort(arr, new Comparator() {@Overridepublic int compare(Object o1, Object o2) {Integer i1 = (Integer) o1;Integer i2 = (Integer) o2;return i2 - i1;}});System.out.println("===排序后===");System.out.println(Arrays.toString(arr));

自己实现 工具类的排序

public class ArraysSortCustom {public static void main(String[] args) {int[] arr = {1, -1, 8, 0, 20};//bubble01(arr);bubble02(arr, new Comparator() {@Overridepublic int compare(Object o1, Object o2) {int i1 = (Integer) o1;int i2 = (Integer) o2;return i2 - i1;// return i2 - i1;}});System.out.println("==定制排序后的情况==");System.out.println(Arrays.toString(arr));}//使用冒泡完成排序public static void bubble01(int[] arr) {int temp = 0;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]) {temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}//结合冒泡 + 定制public static void bubble02(int[] arr, Comparator c) {int temp = 0;for (int i = 0; i < arr.length - 1; i++) {for (int j = 0; j < arr.length - 1 - i; j++) {//数组排序由 c.compare(arr[j], arr[j + 1])返回的值决定if (c.compare(arr[j], arr[j + 1]) > 0) {temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}
}

自然排序练习

        //(2)price从小到大Arrays.sort(books, new Comparator() {//这里是对Book数组排序,因此  o1 和 o2 就是Book对象@Overridepublic int compare(Object o1, Object o2) {Book book1 = (Book) o1;Book book2 = (Book) o2;//从大 到小return (int) (book2.getPrice() - book1.getPrice());/*double priceVal = book2.getPrice() - book1.getPrice();//这里老师进行了一个转换//如果发现返回结果和我们输出的不一致,就修改一下返回的 1 和 -1if (priceVal > 0) {return -1;} else if (priceVal < 0) {return 1;} else {return 0;}*/}});//(3)按照书名长度从大到小//        Arrays.sort(books, new Comparator() {//            //这里是对Book数组排序,因此  o1 和 o2 就是Book对象
//            @Override
//            public int compare(Object o1, Object o2) {//                Book book1 = (Book) o1;
//                Book book2 = (Book) o2;
//                //要求按照书名的长度来进行排序
//                return book2.getName().length() - book1.getName().length();
//            }
//        });

二分查找

        Integer[] arr = {1, 2, 90, 123, 567};// binarySearch 通过二分搜索法进行查找,要求必须排好// 老韩解读//1. 使用 binarySearch 二叉查找//2. 要求该数组是有序的. 如果该数组是无序的,不能使用binarySearch//3. 如果数组中不存在该元素,就返回 return -(low + 1);  // key not found.int index = Arrays.binarySearch(arr, 567);System.out.println("index=" + index);
private static int binarySearch0(Object[] a, int fromIndex, int toIndex,Object key) {int low = fromIndex;int high = toIndex - 1;while (low <= high) {int mid = (low + high) >>> 1;@SuppressWarnings("rawtypes")Comparable midVal = (Comparable)a[mid];@SuppressWarnings("unchecked")int cmp = midVal.compareTo(key);if (cmp < 0)//低索引,为中间值+1low = mid + 1;else if (cmp > 0)//高索引,为中间值-1high = mid - 1;elsereturn mid; // key found}return -(low + 1);  // key not found.}

拷贝 填充 比较 转list

拷贝底层走的是:System.arraycopy

        //copyOf 数组元素的复制// 老韩解读//1. 从 arr 数组中,拷贝 arr.length个元素到 newArr数组中//2. 如果拷贝的长度 > arr.length 就在新数组的后面 增加 null//3. 如果拷贝长度 < 0 就抛出异常NegativeArraySizeException//4. 该方法的底层使用的是 System.arraycopy()Integer[] newArr = Arrays.copyOf(arr, arr.length);System.out.println("==拷贝执行完毕后==");System.out.println(Arrays.toString(newArr));//ill 数组元素的填充Integer[] num = new Integer[]{9,3,2};//老韩解读//1. 使用 99 去填充 num数组,可以理解成是替换原理的元素Arrays.fill(num, 99);System.out.println("==num数组填充后==");System.out.println(Arrays.toString(num));//equals 比较两个数组元素内容是否完全一致Integer[] arr2 = {1, 2, 90, 123};//老韩解读//1. 如果arr 和 arr2 数组的元素一样,则方法true;//2. 如果不是完全一样,就返回 falseboolean equals = Arrays.equals(arr, arr2);System.out.println("equals=" + equals);//asList 将一组值,转换成list//老韩解读//1. asList方法,会将 (2,3,4,5,6,1)数据转成一个List集合//2. 返回的 asList 编译类型 List(接口)//3. asList 运行类型 java.util.Arrays#ArrayList, 是Arrays类的//   静态内部类 private static class ArrayList<E> extends AbstractList<E>//              implements RandomAccess, java.io.SerializableList asList = Arrays.asList(2,3,4,5,6,1);System.out.println("asList=" + asList);System.out.println("asList的运行类型" + asList.getClass());

System

  1. exit退出当前程序
  2. arraycopy:复制数组元素,比较适合底层调用,一般使用Arrays.copyOf完成复制数组.
    int[] src={1,2,3];
    int[] dest = new int[3];
    System.arraycopy(src, 0, dest, 0, 3);
  3. currentTimeMillens:返回当前时间距离1970-1-1的毫秒数4) gc:运行垃圾回收机制System.gc(;
        //exit 退出当前程序//        System.out.println("ok1");
//        //老韩解读
//        //1. exit(0) 表示程序退出
//        //2. 0 表示一个状态 , 正常的状态
//        System.exit(0);//
//        System.out.println("ok2");//arraycopy :复制数组元素,比较适合底层调用,// 一般使用Arrays.copyOf完成复制数组int[] src={1,2,3};int[] dest = new int[3];// dest 当前是 {0,0,0}//老韩解读//1. 主要是搞清楚这五个参数的含义//2.//     源数组//     * @param      src      the source array.//     srcPos: 从源数组的哪个索引位置开始拷贝//     * @param      srcPos   starting position in the source array.//     dest : 目标数组,即把源数组的数据拷贝到哪个数组//     * @param      dest     the destination array.//     destPos: 把源数组的数据拷贝到 目标数组的哪个索引//     * @param      destPos  starting position in the destination data.//     length: 从源数组拷贝多少个数据到目标数组//     * @param      length   the number of array elements to be copied.System.arraycopy(src, 0, dest, 0, src.length);// int[] src={1,2,3};System.out.println("dest=" + Arrays.toString(dest));//[1, 2, 3]//currentTimeMillens:返回当前时间距离1970-1-1 的毫秒数// 老韩解读:System.out.println(System.currentTimeMillis());

BigInteger

应用场景:

  1. Biglnteger适合保存比较大的整型
  2. BigDecimal适合保存精度更高的浮点型(小数)
        //当我们编程中,需要处理很大的整数,long 不够用//可以使用BigInteger的类来搞定
//        long l = 23788888899999999999999999999l;
//        System.out.println("l=" + l);BigInteger bigInteger = new BigInteger("237888999999999");BigInteger bigInteger2 = new BigInteger("10099999999");System.out.println(bigInteger);//老韩解读//1. 在对 BigInteger 进行加减乘除的时候,需要使用对应的方法,不能直接进行 + - * ///2. 可以创建一个 要操作的 BigInteger 然后进行相应操作BigInteger add = bigInteger.add(bigInteger2);System.out.println(add);//BigInteger subtract = bigInteger.subtract(bigInteger2);System.out.println(subtract);//减BigInteger multiply = bigInteger.multiply(bigInteger2);System.out.println(multiply);//乘BigInteger divide = bigInteger.divide(bigInteger2);System.out.println(divide);//除

add substract multiply divide

BigDecimal

        //当我们需要保存一个精度很高的数时,double 不够用//可以是 BigDecimal
//        double d = 1999.11111111111999999999999977788d;
//        System.out.println(d);BigDecimal bigDecimal = new BigDecimal("1999.1611");BigDecimal bigDecimal2 = new BigDecimal("3");System.out.println(bigDecimal);//老韩解读//1. 如果对 BigDecimal进行运算,比如加减乘除,需要使用对应的方法//2. 创建一个需要操作的 BigDecimal 然后调用相应的方法即可System.out.println(bigDecimal.add(bigDecimal2));System.out.println(bigDecimal.subtract(bigDecimal2));System.out.println(bigDecimal.multiply(bigDecimal2));//System.out.println(bigDecimal.divide(bigDecimal2));//可能抛出异常ArithmeticException//在调用divide 方法时,指定精度即可. BigDecimal.ROUND_CEILING//如果有无限循环小数,就会保留 分子 的精度System.out.println(bigDecimal.divide(bigDecimal2, BigDecimal.ROUND_CEILING));
ceiling
n.
天花板,吊顶;上限,最高限度;最高飞行限度,升限
        //BigDecimal.ROUND_HALF_UP 四舍五入System.out.println(bigDecimal.divide(bigDecimal2, 2, RoundingMode.HALF_UP));//上舍入System.out.println(bigDecimal.divide(bigDecimal2, BigDecimal.ROUND_UP));//如:2.44,上舍入为 2.5System.out.println(new BigDecimal("2.44").setScale(1, BigDecimal.ROUND_UP));

银行家算法舍入

        //BigDecimal.ROUND_HALF_EVEN 圆半偶数//银行家算法:四舍 六入 五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一。System.out.println(bigDecimal.divide(bigDecimal2, 2, RoundingMode.HALF_EVEN));System.out.println(bigDecimal.divide(bigDecimal2, RoundingMode.HALF_EVEN).setScale(2, RoundingMode.HALF_EVEN));
        //四舍六入,五看前一位是偶数舍,奇数进位。5后非0,直接进1。所以为1.5BigDecimal a = new BigDecimal("1.45000009");System.out.println(a.setScale(1, BigDecimal.ROUND_HALF_EVEN));//1.4500000,保留1位小数,就是1.4,因为:5前是 4是 偶数,舍去。如果是 奇数,那才+1
5.54 5.5
2.55 2.6
1.66 1.7
1.25 1.2
1.06 1.1
-1.06 -1.1
-1.11 -1.1
-1.65 -1.6
-2.55 -2.6
-5.54 -5.5

日期类

date

年y

年中的月份M

年中的周数w

月份中的周数w

年中的天数D

月份中的天数d

月份中的星期F

星期中的天数E

Am/pm标记 a

H 一天中的小时数(0-23)

一天中的小时数(1-24)k
K am/pm中的小时数(0-11)
h am/pm中的小时数(1-12)

小时中的分钟数 m

分钟中的秒数 s

毫秒数 s

时区z

时区Z

//1. 获取当前系统时间//2. 这里的Date 类是在java.util包//3. 默认输出的日期格式是国外的方式, 因此通常需要对格式进行转换Date d1 = new Date(); //获取当前系统时间System.out.println("当前日期=" + d1);Date d2 = new Date(9234567); //通过指定毫秒数得到时间System.out.println("d2=" + d2); //获取某个时间对应的毫秒数
////老韩解读//1. 创建 SimpleDateFormat对象,可以指定相应的格式//2. 这里的格式使用的字母是规定好,不能乱写//当前日期=2022年11月11日 16:42:41 星期五 。如果是小hh,就是12小时制SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss E");String format = sdf.format(d1); // format:将日期转换成指定格式的字符串System.out.println("当前日期=" + format);//老韩解读//1. 可以把一个格式化的String 转成对应的 Date//2. 得到Date 仍然在输出时,还是按照国外的形式,如果希望指定格式输出,需要转换//3. 在把String -> Date , 使用的 sdf 格式需要和你给的String的格式一样,否则会抛出转换异常String s = "1996年01月01日 10:20:30 星期一";Date parse = sdf.parse(s);System.out.println("parse=" + sdf.format(parse));

calendar

        //1. Calendar是一个抽象类, 并且构造器是private//2. 可以通过 getInstance() 来获取实例//3. 提供大量的方法和字段提供给程序员//4. Calendar没有提供对应的格式化的类,因此需要程序员自己组合来输出(灵活)//5. 如果我们需要按照 24小时进制来获取时间, Calendar.HOUR ==改成=> Calendar.HOUR_OF_DAYCalendar c = Calendar.getInstance(); //创建日历类对象//比较简单,自由System.out.println("c=" + c);//2.获取日历对象的某个日历字段System.out.println("年:" + c.get(Calendar.YEAR));// 这里为什么要 + 1, 因为Calendar 返回月时候,是按照 0 开始编号System.out.println("月:" + (c.get(Calendar.MONTH) + 1));System.out.println("日:" + c.get(Calendar.DAY_OF_MONTH));System.out.println("小时:" + c.get(Calendar.HOUR));System.out.println("分钟:" + c.get(Calendar.MINUTE));System.out.println("秒:" + c.get(Calendar.SECOND));//Calender 没有专门的格式化方法,所以需要程序员自己来组合显示System.out.println(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DAY_OF_MONTH) +" " + c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.SECOND) );

Local

前面两代日期类的不足分析
JDK 1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被弃用了。而Calendar也存在问题是:
1)可变性:像日期和时间这样的类应该是不可变的。
2)偏移性: Date中的年份是从1900开始的,而月份都从0开始。3)格式化:格式化只对Date有用,Calendar则不行。
4)此外,它们也不是线程安全的;不能处理闰秒等(每隔2天,多出1s)。

1)LocalDate(日期)、LocalTime(时间)、LocalDateTime(日期时间)JDk8LocalDate只包含日期,可以获取日期字段
LocalTime只包含时间,可以获取时间字段
LocalDateTime包含日期+时间,可以获取日期和时间字段

  • DateTimeFormatter
        //1. 使用now() 返回表示当前日期时间的 对象LocalDateTime ldt = LocalDateTime.now(); //LocalDate.now();//LocalTime.now()System.out.println(ldt);//2. 使用DateTimeFormatter 对象来进行格式化// 创建 DateTimeFormatter对象DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");String format = dateTimeFormatter.format(ldt);System.out.println("格式化的日期=" + format);System.out.println("年=" + ldt.getYear());System.out.println("月=" + ldt.getMonth());System.out.println("月=" + ldt.getMonthValue());System.out.println("日=" + ldt.getDayOfMonth());System.out.println("时=" + ldt.getHour());System.out.println("分=" + ldt.getMinute());System.out.println("秒=" + ldt.getSecond());LocalDate now = LocalDate.now(); //可以获取年月日LocalTime now2 = LocalTime.now();//获取到时分秒//提供 plus 和 minus方法可以对当前时间进行加或者减//看看890天后,是什么时候 把 年月日-时分秒LocalDateTime localDateTime = ldt.plusDays(890);System.out.println("890天后=" + dateTimeFormatter.format(localDateTime));//看看在 3456分钟前是什么时候,把 年月日-时分秒输出LocalDateTime localDateTime2 = ldt.minusMinutes(3456);System.out.println("3456分钟前 日期=" + dateTimeFormatter.format(localDateTime2));

时间戳

  1. Instant 时间戳类似于Date
    提供了一系列和Date类转换的方式

Instant—>Date:
Date date = Date.from(instant);

Date>lnstant:
Instant instant = date.tolnstant();

        //1.通过 静态方法 now() 获取表示当前时间戳的对象Instant now = Instant.now();System.out.println(now);//2. 通过 from 可以把 Instant转成 DateDate date = Date.from(now);//3. 通过 date的toInstant() 可以把 date 转成Instant对象Instant instant = date.toInstant();

MonthDay类:检查重复事件是否是闰年
增加日期的某个部分
使用plus方法测试增加时间的某个部分
使用minus方法测试查看一年前和一年后的日期

Period

  • 在JDK8中,可以使用java.time.Period来计算日期间隔差异
  • 主要是Period类方法getYears(),getMonths()和getDays()来计算,只能精确到年月日
        LocalDate today = LocalDate.now();//2022-11-11System.out.println(today);//2002-01-16LocalDate birthDate = LocalDate.of(2002,1,16);System.out.println(birthDate);Period period = Period.between(birthDate,today);//年龄: 20 年 9 月 26 日5System.out.printf("年龄: %d 年 %d 月 %d 日",period.getYears(),period.getMonths(),period.getDays());

Duration

        //yyyy-MM-dd HH:mm:ssLocalDateTime loTime = LocalDateTime.now();DayOfWeek dayOfWeek = loTime.getDayOfWeek();int value = dayOfWeek.getValue();System.out.println(value);//周五,返回5Duration duration = Duration.between(loTime, loTime.plusDays(1));long minutes = duration.toMinutes();//两个时间差的分钟数。1440分钟long hours = duration.toHours();//小时。24小时。

打印编码

        Date d = new Date();Long s = d.getTime();//13System.out.println(s.toString().getBytes("UTF-8").length);//方法一:中文操作系统中打印GBK,我的现在统一为 UTF-8System.out.println(System.getProperty("file.encoding"));//方法二:中文操作系统中打印GBKSystem.out.println(Charset.defaultCharset());

Local和Date转换实战

public class LocalDateTimeUtils {private static ZoneId zoneId = ZoneId.systemDefault();/*** Date 转 LocalDateTime** @param date 参数为 Date* @return 返回为:LocalDateTime*/public static LocalDateTime toLocal(Date date) {//1.从日期获取ZonedDateTime并使用其方法toLocalDateTime()获取LocalDateTime//2.使用LocalDateTime的Instant()工厂方法//获取系统的 ZoneId//先转为 第三代的时间戳类,在用 atZone,转为 Local时间LocalDateTime endLocal = date.toInstant().atZone(zoneId).toLocalDateTime();//date转为 时间戳,用 Local时间的 ofInstant 创建LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), zoneId);return endLocal;}/*** LocalDateTime 转 Date** @param loTime 参数为 LocalDateTime* @return 返回为 Date*/public static Date toDate(LocalDateTime loTime) {//1.使用atZone()方法将LocalDateTime转换为ZonedDateTime//2.将ZonedDateTime转换为Instant,并从中获取Date//转为 ZonedDateTimeZonedDateTime zdt = loTime.atZone(zoneId);//使用 from转为 dateDate date = Date.from(zdt.toInstant());return date;}public static void main(String[] args) {LocalDateTime localDateTime = dateConvertLocalDateTime(new Date());Date date = localDateTimeConvertDate(localDateTime);System.out.println(date);}
}

String练习

自定义位置翻转

    public static String reverse(String str, int start, int end) {//substring的截取,不包含end,所以+1String substring = str.substring(start, end + 1);//分割成 数组String[] split = str.split(substring);//借用 buffer 翻转StringBuffer sb = new StringBuffer(substring);//拼接返回return split[0] + sb.reverse() + split[1];}
    public static String reverse2(String str, int start, int end) {//(1) 写出正确的情况//(2) 然后取反即可//(3) 这样写,你的思路就不乱//小于 长度,就是 结束最大为 最大索引if(!(str != null && start >= 0 && end > start && end < str.length())) {throw new RuntimeException("参数不正确");}char[] chars = str.toCharArray();char t;//进行循环,条件为 开始索引 < 结束索引。每次开始索引++,结束索引--//也可以在循环条件这里,定义 i 和 j//int i = start, j = end; i < j; i++, j--for (; start < end; start++, end--) {t = chars[start];chars[start] = chars[end];chars[end] = t;}return new String(chars);}

String.format使用

    /*** 编写方法: 完成输出格式要求的字符串* 编写java程序,输入形式为: Han shun Ping的人名,以Ping,Han .S的形式打印*       出来    。其中.S是中间单词的首字母* 思路分析* (1) 对输入的字符串进行 分割split(" ")* (2) 对得到的String[] 进行格式化String.format()* (3) 对输入的字符串进行校验即可*/public static void printName(String str) {if(str == null) {System.out.println("str 不能为空");return;}String[] names = str.split(" ");if(names.length != 3) {System.out.println("输入的字符串格式不对");return;}String format = String.format("%s,%s .%c", names[2], names[0], names[1].toUpperCase().charAt(0));System.out.println(format);}

统计 大写小写数字

    public static void printDigitAndUpperAndLower(String str) {int d = 0;int u = 0;int l = 0;for (char c : str.toCharArray()) {if (Character.isDigit(c)) {d++;}if (Character.isUpperCase(c)) {u++;}if (Character.isLowerCase(c)) {l++;}}System.out.println("数字的数量:" + d);System.out.println("大写字符的数量" + u);System.out.println("小写字母的数量" + l);}
    /*** 输入字符串,判断里面有多少个大写字母,多少个小写字母,多少个数字* 思路分析* (1) 遍历字符串,如果 char 在 '0'~'9' 就是一个数字* (2) 如果 char 在 'a'~'z' 就是一个小写字母* (3) 如果 char 在 'A'~'Z' 就是一个大写字母* (4) 使用三个变量来记录 统计结果*/public static void countStr(String str) {if (str == null) {System.out.println("输入不能为 null");return;}int strLen = str.length();int numCount = 0;int lowerCount = 0;int upperCount = 0;int otherCount = 0;for (int i = 0; i < strLen; i++) {if(str.charAt(i) >= '0' && str.charAt(i) <= '9') {numCount++;} else if(str.charAt(i) >= 'a' && str.charAt(i) <= 'z') {lowerCount++;} else if(str.charAt(i) >= 'A' && str.charAt(i) <= 'Z') {upperCount++;} else {otherCount++;}}System.out.println("数字有 " + numCount);System.out.println("小写字母有 " + lowerCount);System.out.println("大写字母有 " + upperCount);System.out.println("其他字符有 " + otherCount);}
String t1= "hello" + s1;//底层是 StringBuilder ,还是new 的
t1.inter();//返回t1字符串在常量池的地址

【韩老师零基础30天学会Java 09】Math Arrays 数组拷贝 自然排序 System BigDecimal 银行家算法舍入 日期类LocalDateTime转换 String翻转相关推荐

  1. 韩顺平零基础30天学会Java【章7 面向对象编程(中级)】

    P273-P359 包 区分相同名字的类 当类很多时,可以很好的管理类 控制访问范围 实际上就是创建不同的文件夹来保存类文件 语法 package 包名; 包的命名规则 只能包含数字.字母.下划线.小 ...

  2. 适合有编程基础的人看的《韩顺平零基础30天学java》笔记(P104~P129)

    写在最前边: 研究生一枚,为后端实习和未来工作打基础.无意间发现韩顺平老师的课程,细心细致,讲课和吴恩达老师一样,都是保姆式讲解,各种基础知识都会补充,爱了. 韩顺平老师课程地址:https://ww ...

  3. 零基础小白如何学会Java?

    Java作为目前使用最广泛的编程语言,自身在常见的企业级业务应用程序以及Android应用程序等方面都有突出的表现.作为跨平台语言,具有安全性.易用性.通用性等特点,被特意设计用于互联网的分布式环境. ...

  4. 观韩顺平的《0基础30天学会Java》后感

    万丈高楼平地起,在韩老师的带领下你的筑基期肯定很强,日后成仙指日可待. 开门先说重点:一定要加韩老师微信要资料!一定要加韩老师微信要资料!一定要加韩老师微信要资料!,重要的事情说三遍,千万不要去官网下 ...

  5. 零基础30天学会AE:从入门到精通系统教程

    下面这套<30天速成: 新手AE入门到精通教程>只需30天,每天一节课,让你快速提升自己技能. AE到底有什么作用呢?我们看的轩辕剑.枪战等影视作品,都可以通过AE来实现,成为影视 后期的 ...

  6. 最全面的WordPress建站教程,零基础30分钟学会建站

    宝塔面板添加WordPress站点 一.建站准备条件 条件1:阿里云服务器一台.原则上有台服务器就好了,不过我一般喜欢用大品牌,稳定和安全. 条件2: 阿里云域名一个.在哪家买的服务器,就用哪家的域名 ...

  7. Java零基础好学吗?Java该怎么学?

    Java零基础好学吗?Java该怎么学?在IT行业中,Java开发工程师是一个很吃香的职业,薪资水平也是几乎过万,许多人想转行Java开发,但又担心零基础能不能学会,学起来有多难,如果是零基础自学Ja ...

  8. 零基础适合学python吗-零基础更适合学习Java还是python?

    原标题:零基础更适合学习Java还是python? 最近有小伙伴向云和数据小编咨询,说想学习一门编程语言,但是没有任何基础,问是学习Java好还是学python更合适?对于这位小伙伴的问题,小编觉得有 ...

  9. 适合Java零基础小白学习的Java零基础教程

    很多Java零基础小白,在刚刚快入门的时候玩命的学习,玩命的记住Java原理,天天早上五点起床背Java的一些英文词汇,然后遇见一些未知的困难,让自己打到癫狂状态,逐渐迷失自我放弃Java,为了解决这 ...

最新文章

  1. POJ-1185 炮兵阵地 动态规划+状态压缩
  2. Java 基础 之 常量
  3. Ubuntu下eclipse indigo版在线安装struts插件
  4. Lua——基本语法知识,从hello word开始
  5. GCC Inline ASM GCC内联汇编
  6. Java读取word中表格
  7. WebRTC 成为 W3C 与 IETF 正式标准
  8. sed修炼系列(三):sed高级应用之实现窗口滑动技术
  9. js window.open 参数设置
  10. 这可能是 Python 里最强的绘制地图神器
  11. github项目下载单个文件夹的办法
  12. python爬股票信息_爬取股票信息(股票代码+价格)
  13. 给本地openwrt/LEDE软件源添加软件包,更新Package.sig签名文件,解决Signature check failed问题
  14. 苹果照片未删却不见了_关于iphone照片分类的问题以及一款照片整理app推荐
  15. Feedback(反馈)详述一
  16. 创维e900什么芯片_创维E900V21C晶晨芯片卡刷包 V1.0 免费版
  17. 慕课matlab学习 第四章-021窗口分割、标注、和坐标控制
  18. google专利2则
  19. LeetCode 314 周赛
  20. 齐次线性方程-基础解系与解向量的关系

热门文章

  1. Fabric区块链官方浏览器【中文版】
  2. 基因数据处理119之java调用SSW在linux下运行
  3. ODOO技术在教育行业软件上的应用
  4. php-ffmpeg保存为.mp4格式时报错
  5. switch和for循环的案例
  6. java struts2 mvc_struts2自定义MVC框架
  7. 2017 年 IT 界最严重的裁员事件大汇总,你怎么看?
  8. 火锅店宣传PPT-朴尔PPT
  9. iOS安全攻防之越狱设备检测
  10. 开发 IOS app 不通过 苹果商店安装的几种方式