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;
      }
    }

     

  • 相关阅读:
    AcWing 1135. 新年好 图论 枚举
    uva 10196 将军 模拟
    LeetCode 120. 三角形最小路径和 dp
    LeetCode 350. 两个数组的交集 II 哈希
    LeetCode 174. 地下城游戏 dp
    LeetCode 面试题 16.11.. 跳水板 模拟
    LeetCode 112. 路径总和 递归 树的遍历
    AcWing 1129. 热浪 spfa
    Thymeleaf Javascript 取值
    Thymeleaf Javascript 取值
  • 原文地址:https://www.cnblogs.com/biwangwang/p/14263086.html
Copyright © 2011-2022 走看看