0%

Java基础-数字与字符串

封装类

  • 所有的基本类型,都有对应的类类型,如int->Integer,这种类就叫做封装类

  • 转换如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class TestNumber {
    public static void main(String[] args) {
    int i = 5;
    //把一个基本类型的变量,转换为Integer对象
    Integer it = new Integer(i);
    //把一个Integer对象,转换为一个基本类型的int
    int i2 = it.intValue();
    }
    }

Number类

672

  • 封装类和基本类型的转换
1
2
3
4
5
6
7
8
9
10
11
12
public class TestNumber {

public static void main(String[] args) {
int i = 5;
//基本类型转封装类型
Integer it = new Integer(i);
//Integer是Number的子类,所以打印true,其中instanceof为二元操作符,测试左边的对象是否是右边类的实例
System.out.println(it instanceof Number);
//封装类型转基本类型
int i2 = it.intValue();
}
}
  • 自动拆箱(通过=自动转换)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class TestNumber {
    public static void main(String[] args) {
    int i = 5;
    Integer it = new Integer(i);
    //封装类型转换成基本类型
    int i2 = it.intValue();
    //自动转换就叫拆箱
    int i3 = it;
    }
    }
  • int的最大值可以通过封装类获取

    1
    2
    3
    4
    5
    6
    7
    8
    public class TestNumber {
    public static void main(String[] args) {
    //int的最大值
    System.out.println(Integer.MAX_VALUE);
    //int的最小值
    System.out.println(Integer.MIN_VALUE);
    }
    }

字符串转换

  • 数字转字符串

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class TestNumber {
    public static void main(String[] args) {
    int i = 5;
    //方法1
    String str = String.valueOf(i);
    //方法2
    Integer it = i;
    String str2 = it.toString();
    }
    }
  • 字符串转数字

    1
    2
    3
    4
    5
    6
    7
    public class TestNumber {
    public static void main(String[] args) {
    String str = "999";
    int i= Integer.parseInt(str);
    System.out.println(i);
    }
    }

数学方法

  • 四舍五入, 随机数,开方,次方,π,自然常数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public class TestNumber {

    public static void main(String[] args) {
    float f1 = 5.4f;
    float f2 = 5.5f;
    //5.4四舍五入即5
    System.out.println(Math.round(f1));
    //5.5四舍五入即6
    System.out.println(Math.round(f2));
    //得到一个0-1之间的随机浮点数(取不到1)
    System.out.println(Math.random());
    //得到一个0-10之间的随机整数 (取不到10)
    System.out.println((int)( Math.random()*10));
    //开方
    System.out.println(Math.sqrt(9));
    //次方(2的4次方)
    System.out.println(Math.pow(2,4));
    //π
    System.out.println(Math.PI);
    //自然常数
    System.out.println(Math.E);
    }
    }

格式化输出

1
2
- System.out.printf("%s%s%n",a,a);	//%n表示换行
- String.format("%s%s",a,a);

换行符

在不同的操作系统,换行符是不一样的
(1)在DOS和Windows中,每行结尾是 “\r\n”;
(2)Linux系统里,每行结尾只有 “\n”;
(3)Mac系统里,每行结尾是只有 “\r”。

  • 为了使同一个java程序的换行符在所有的操作系统中都有一样的表现,使用%n即可以做到平台无关的换行。

总长度,左对齐,补0,千位分隔符,小数点位数,本地化表达

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class TestNumber {
public static void main(String[] args) {
int year = 2020;
//总长度,左对齐,补0,千位分隔符,小数点位数,本地化表达
//直接打印数字
System.out.format("%d%n",year);
//总长度是8,默认右对齐
System.out.format("%8d%n",year);
//总长度是8,左对齐
System.out.format("%-8d%n",year);
//总长度是8,不够补0
System.out.format("%08d%n",year);
//千位分隔符
System.out.format("%,8d%n",year*10000);
//小数点位数
System.out.format("%.2f%n",Math.PI);
//不同国家的千位分隔符
System.out.format(Locale.FRANCE,"%,.2f%n",Math.PI*10000);
System.out.format(Locale.US,"%,.2f%n",Math.PI*10000);
System.out.format(Locale.UK,"%,.2f%n",Math.PI*10000);
}
}

字符

  • char的对应封装类时Character
  • 一个中文字也可以算一个字符 char a = ‘哈’;
  • 不能够直接把一个字符转换成字符串 String a = ‘1’;

字符串

  • String的创建

    • 每当有一个字面值出现的时候,虚拟机就会创建一个字符串
    • 调用String的构造方法创建一个字符串对象
    • 通过+进行字符串拼接也会创建新的字符串对象
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class TestString {

    public static void main(String[] args) {
    String garen ="盖伦"; //字面值,虚拟机碰到字面值就会创建一个字符串对象
    String teemo = new String("提莫"); //创建了两个字符串对象
    char[] cs = new char[]{'崔','斯','特'};
    String hero = new String(cs);// 通过字符数组创建一个字符串对象
    String hero3 = garen + teemo;// 通过+加号进行字符串拼接
    }
    }
  • String是final类的,所以不能被继承

  • String是immutable(不可改变)的,即创建好了之后里面的内容永远不能改变

  • String的常用方法

    • charAt(position):获取指定下标的字符

    • toCharArray():获取对应的字符数组

    • substring():截取子字符串

      • 单参数表示截取该下标之后的字符串
      • 双参数表示截取区间字符串,左闭右开
    • split():根据分隔符进行分割,得到一个字符串数组

    • trim():去掉首尾空格

    • toLowerCase() / toUpperCase():全部变成小写/大写

    • indexOf():返回字符串参数第一次出现的位置

    • contains():是否包含参数表示的字符串

    • replaceAll() / replaceFirst():替换所有/第一个字符串为arg2

    • ==:是否是同一个对象(不仅要字符串内容一样)

      • 特例:

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        public class TestString {
        public static void main(String[] args) {
        String str1 = "the light";
        String str3 = "the light";
        System.out.println( str1 == str3);
        }
        }
        /*一般说来,编译器每碰到一个字符串的字面值,就会创建一个新的对象
        所以在第6行会创建了一个新的字符串"the light"
        但是在第7行,编译器发现已经存在现成的"the light",那么就直接拿来使用,而没有进行重复创建*/
    • equals():内容是否相同

    • startsWith() / endsWith:是否以子字符串参数开始或结束

  • StringBuilder、StringBuffer

    • String、Stringbuilder、Stringbuffer

    String不可变的好处:提高字符串池的效率和安全性,在拷贝对象内容时只要复制它的地址,效率高

    为什么StringBuffer可以变长?
    和String内部是一个字符数组一样,StringBuffer也维护了一个字符数组。 但是,这个字符数组,留有冗余长度,可以动态变化。

    如在对Stringbuilder的操作过程中若长度超过了数组长度的限制,则会将原内容拷贝到一个新数组中,最后让内部的字符数组指向这个新数组

    StringBuilder是线程不安全的,Stringbuffer是线程安全的,其他的使用方法和结果基本没有差别

    如果我们的程序是在单线程下运行,或者是不必考虑到线程同步问题,我们应该优先使用StringBuilder类;如果要保证线程安全,自然是StringBuffer。

    • StringBuilder常用方法
      • append():在字符串末尾追加指定字符串
      • delete():删除两个下标参数间的字符串,左闭右开
      • insert():在指定下标处插入指定字符串
      • reverse():对字符串进行反转