zoukankan      html  css  js  c++  java
  • java常用工具类

    java常用工具类

    String

    常用方法

    "ab".equalsIgnoreCase("AB");    //true
    "ab".equalsIgnoreCase("AB");
    "Hello".indexOf("l"); // 2
    "Hello".lastIndexOf("l"); // 3
    "Hello".startsWith("He"); // true
    "Hello".endsWith("lo"); // true
    "Hello".substring(2); // "llo"
    "Hello".substring(2, 4); "ll"
    " Hello ".trim(); // "Hello"
    "u3000Hellou3000".strip(); // "Hello"
    " Hello ".stripLeading(); // "Hello "
    " Hello ".stripTrailing(); // " Hello"
    "".isEmpty(); // true,因为字符串长度为0
    " ".isEmpty(); // false,因为字符串长度不为0
    " ".isBlank(); // true,因为只包含空白字符
    " Hello ".isBlank(); // false,因为包含非空白字符
    String s = "hello";
    s.replace('l', 'w'); // "hewwo",所有字符'l'被替换为'w'
    s.replace("ll", "~~"); // "he~~o",所有子串"ll"被替换为"~~"
    String s = "A,B,C,D";
    String[] ss = s.split("\,"); // {"A", "B", "C", "D"}
    String[] arr = {"A", "B", "C"};
    String s = String.join("***", arr); // "A***B***C"

    类型转换

    把任意基本类型或引用类型转换为字符串

    String.valueOf(123); // "123"
    String.valueOf(45.67); // "45.67"
    String.valueOf(true); // "true"
    String.valueOf(new Object()); // 类似java.lang.Object@636be97c

    把字符串转换为其他类型

    int n1 = Integer.parseInt("123"); // 123
    int n2 = Integer.parseInt("ff", 16); // 按十六进制转换,255

    boolean b1 = Boolean.parseBoolean("true"); // true
    boolean b2 = Boolean.parseBoolean("FALSE"); // false

    转换为char[]

    public class Main {
       public static void main(String[] args) {
           char[] cs = "Hello".toCharArray();
           String s = new String(cs);
           System.out.println(s);
           cs[0] = 'X';
           System.out.println(s);
      }
    }

    字符编码

    Java的Stringchar在内存中总是以Unicode编码表示。

    byte[] b1 = "Hello".getBytes(); // 按系统默认编码转换,不推荐
    byte[] b2 = "Hello".getBytes("UTF-8"); // 按UTF-8编码转换
    byte[] b2 = "Hello".getBytes("GBK"); // 按GBK编码转换
    byte[] b3 = "Hello".getBytes(StandardCharsets.UTF_8); // 按UTF-8编码转换

    String s1 = new String(b, "GBK"); // 按GBK转换
    String s2 = new String(b, StandardCharsets.UTF_8); // 按UTF-8转换

    StringBuilder

    考察下面代码:

    String s = "";
    for (int i = 0; i < 1000; i++) {
       s = s + "," + i;
    }

    虽然可以直接拼接字符串,但是,在循环中,每次循环都会创建新的字符串对象,然后扔掉旧的字符串。这样,绝大部分字符串都是临时对象,不但浪费内存,还会影响GC效率。

    为了能高效拼接字符串,Java标准库提供了StringBuilder,它是一个可变对象,可以预分配缓冲区,这样,往StringBuilder中新增字符时,不会创建新的临时对象:

    StringBuilder sb = new StringBuilder(1024);
    for (int i = 0; i < 1000; i++) {
       sb.append(',');
       sb.append(i);
    }
    String s = sb.toString();

    如果我们查看StringBuilder的源码,可以发现,进行链式操作的关键是,定义的append()方法会返回this,这样,就可以不断调用自身的其他方法。


    StringJoiner

    类似用分隔符拼接数组的需求很常见,所以Java标准库还提供了一个StringJoiner来干这个事:

    public class Main {
       public static void main(String[] args) {
           String[] names = {"Bob", "Alice", "Grace"};
           var sj = new StringJoiner(", ", "Hello ", "!");//指定开头和结尾
           for (String name : names) {
               sj.add(name);
          }
           System.out.println(sj.toString());
      }
    }

    String还提供了一个静态方法join(),这个方法在内部使用了StringJoiner来拼接字符串,在不需要指定“开头”和“结尾”的时候,用String.join()更方便:

    String[] names = {"Bob", "Alice", "Grace"};
    var s = String.join(", ", names);

    包装类

    引用类型可以赋值为null,表示空,但基本类型不能赋值为null

    建议通过静态方法创建包装类,再转为基本类型不会报异常。

    public class Main {
       public static void main(String[] args) {
           int i = 100;
           // 通过new操作符创建Integer实例(不推荐使用,会有编译警告):
           Integer n1 = new Integer(i);
           // 通过静态方法valueOf(int)创建Integer实例:
           Integer n2 = Integer.valueOf(i);
           // 通过静态方法valueOf(String)创建Integer实例:
           Integer n3 = Integer.valueOf("100");
           System.out.println(n3.intValue());
      }
    }

    Auto Boxing

    Java编译器可以帮助我们自动在intInteger之间转型:

    Integer n = 100; // 编译器自动使用Integer.valueOf(int)
    int x = n; // 编译器自动使用Integer.intValue()

    装箱和拆箱会影响代码的执行效率,因为编译后的class代码是严格区分基本类型和引用类型的。并且,自动拆箱执行时可能会报NullPointerException

    public class Main {
       public static void main(String[] args) {
           Integer n = null;
           int i = n;//异常
      }
    }

    javaBean

    在Java中,有很多class的定义都符合这样的规范:

    • 若干private实例字段;

    • 通过public方法来读写实例字段。

    那么这种class被称为JavaBean

    枚举JavaBean属性

    public class Main {
       public static void main(String[] args) throws Exception {
           BeanInfo info = Introspector.getBeanInfo(Person.class);
           for (PropertyDescriptor pd : info.getPropertyDescriptors()) {
               System.out.println(pd.getName());
               System.out.println(" " + pd.getReadMethod());
               System.out.println(" " + pd.getWriteMethod());
          }
      }
    }

    class Person {
       private String name;
       private int age;

       public String getName() {
           return name;
      }

       public void setName(String name) {
           this.name = name;
      }

       public int getAge() {
           return age;
      }

       public void setAge(int age) {
           this.age = age;
      }
    }

     

  • 相关阅读:
    文件操作回顾
    数据类型回顾
    面向对象三大特性之封装与多态
    面向对象之继承
    轮播图
    jQuery事件操作
    jQuery动画效果
    jQuery篇
    文档对象模型
    javascript
  • 原文地址:https://www.cnblogs.com/biwangwang/p/14263086.html
Copyright © 2011-2022 走看看