hooyantsing's Blog

第32次课程

字数统计: 1.7k阅读时长: 8 min
2019/07/09

源辰74班

第32次课程

07.09.2019

**内容    **

Java_API_lang包[蒋斌]

**1.**Integer类

Integer 类在对象中包装了一个基本类型 int 的值。

int类型最大值和最小值

1
2
3
4
int maxValue = Integer.MAX_VALUE;
int minValue = Integer.MIN_VALUE;
System.out.println(maxValue);
System.out.println(minValue);

包装类,比基本型拥有更多的功能方法

1
2
//将int型包装成Interger类
Integer in = new Integer(10);

自动装箱和拆箱

1
2
3
4
//自动装箱
Integer in = 10;
//自动拆箱
int out = in;

int转其他基本类输出,十进制转其他进制

**int转float:Integer.floatValue()  **

十进制转二进制:Integer.toBinaryString(INT)

十进制转十六进制:Integer.toHexString(INT)

1
2
3
4
5
6
7
8
//获取10的float值 = 10.0
System.out.println(in.floatValue());
//将十进制转二进制
String binaryString =  Integer.toBinaryString(10);  //用于哈夫曼压缩和解压
//将十进制转十六进制
String hexString =  Integer.toHexString(10);
System.out.println("转二进制:"+binaryString);
System.out.println("转十六进制:"+hexString);

2.Character类

Character 类在对象中包装一个基本类型 char 的值。

自动选择输出的类型

*输出数组中的数字:***Character.isDigit(value)              **

*输出数组中的字母:***Character.isLetter(value)           **

*输出数组中的空格:***Character.isWhitespace(value)   **

*输出数组中的大写:***Character.isUpperCase(value)    **

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char[] ch = {'#','7','b','A',' '};
       for(int i=0;i<ch.length;i++) {
           char value = ch[i];
           if(Character.isDigit(value)) {
               System.out.println(value+"这是一个数字");
           }
           if(Character.isLetter(value)) {
               System.out.println(value+"这是一个字母");
           }
           if(Character.isWhitespace(value))  {
               System.out.println(value+"这是一个空格");
           }
           if(Character.isUpperCase(value))  {
               System.out.println(value+"这是一个大写");
           }
       }

3.堆和常量池

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
       //length()是方法,length是属性
       String s = "hello你好";       
       int length = s.length();
       
       //字符串的比较
       //堆中开辟两个不同的空间
       String s1 = new String("hello");
       String s2 = new String("hello");
       //返回false,因为地址不同
       System.out.println(s1==s2);
       
       //常量池中共用同一个常量
       String s3 = "hello";
       String s4 = "hello";
       //返回true
       System.out.println(s3==s4);
       
       //返回false,s1位于堆,s3位于常量池,地址不相同
       System.out.println(s1==s3);

4.String类

将byte转为char后连接成String字符串

1
2
3
byte[] b = {97,98,99,100};
String s1 = new String(b);
System.out.println(s1);

编码:中文 GBK中占2个字节,UTF-8中占3个字节

String.getBytes(“UTF-8/GBK”)

1
2
3
4
5
6
7
8
9
10
11
12
String str = "word你好";
//编码: 中文 GBK中占2个字节,UTF-8中占3个字节
byte[] bytes1 =  str.getBytes("UTF-8");
for(byte by:bytes1) {
    System.out.print(by+",");
}
System.out.println();
byte[] bytes2 = str.getBytes("GBK");
for(byte by:bytes2) {
    System.out.print(by+",");
}
System.out.println();

解码

1
2
3
4
5
//解码
String s2 = new  String(bytes1,"UTF-8");
System.out.println(s2);
//解码 指定范围  从bytes2[1]开始,共解码2个值
String s3 = new String(bytes2,1,2);

字符串转char数组

String.toCharArray()

1
2
3
4
5
//字符串转char
String ch = "hello";
char[] charArray = ch.toCharArray();
for(char c:charArray) {
   System.out.print(c+",");

5.Split方法

将字符串通过“字符”切割成String[]数组元素

String.split(“CHAR”)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//题目:String s = "10,12;23,34,15;6,7,8"; 请将s字符串解析后放入到二维数组中

String s = "10,12;23,34,15;6,7,8";
String[] s1 = s.split(";");
String[][] result = new  String[s1.length][];
for(int i=0;i<s1.length;i++) {
   String[] s2 = s1[i].split(",");
   result[i] = s2;
   }
for(String[] arr1:result) {
   for(String arr2:arr1) {
      System.out.print(arr2+"\t");
      }
   System.out.println();
}

6.e-Mail案例

项目要求:

1
2
3
4
5
6
7
/**
合法邮箱规则:
有且仅有一个@和.
@在.之前且@不能是第一位 . 不能是最后一位
@与.不能相邻
新浪邮箱应当以yc@sina.com
*/

源码:

查找字符所在字符串位置的下标:String.indexOf(“CHAR”)

截取字符串:String.substring(INT,INT)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
       Scanner sc = new Scanner(System.in);
       System.out.println("请输入邮箱地址:");
       String email = sc.nextLine();
       //String.indexOf 用于查找字符所在字符串的位置
       int atIndex = email.indexOf("@");
       int doIndex = email.indexOf(".");
       if(atIndex==-1) {
           throw new RuntimeException("邮箱格式不正确,@位置不对");
       };
       if(doIndex<=atIndex+1) {
           throw new RuntimeException("邮箱格式不正确,.位置不对");
       }
       //String.substring 用于截取字符串
       String userName =  email.substring(0,atIndex);
       String webStie =  email.substring(atIndex+1,doIndex);
       System.out.println(webStie+"欢迎您"+userName);

7.StringBuffer类

线程安全的可变字符序列。

可变字符串,当字符发生变化时,不会重新创建对象

添加字符操作

StringBuffer.append(“CHAR”)

1
2
3
4
5
6
//append()使用
StringBuffer sb = new  StringBuffer("hello");
System.out.println(sb.hashCode());
//添加
sb.append("a");
System.out.println(sb.hashCode());

调用倒转方法后,原sb也发生过改变

StringBuffer.reverse()

1
2
3
4
//reverse()使用
//调用倒转方法后,原sb也发生过改变
StringBuffer bs = sb.reverse();
System.out.println(bs);

将StringBuffer转化为String

StringBuffer.toString();

1
String s = sb.toString();

8.MyString案例

模拟一些已经实现的类的功能

**字符串匹配:String.**compareTo(STRING)

如果相等则返回1,否则返回两字符串中字符差值,并且不再比较之后字符

从后向前匹配:String.endWith(STRING)

从前向后匹配:String.stateWith(STRING)

查找字符,从i开始:String.indexOf(INT,INT)

Class MyString

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package com.hooy.mystring;
public class MyString implements Comparable{
    private char[] ch;
    public MyString() {
       super();
    }
    public MyString(char[] ch) {
       super();
       this.ch = ch;
    }
    private void protect(Object o) {
       if(o==null) {
           throw new RuntimeException("待比较的对象不能为空");
       }
       if(!(o instanceof MyString)) {
           throw new  IllegalArgumentException("待比较的对象不是MyString");
       }
    }
    
    @Override
    public int compareTo(Object o) {
       protect(o);
       MyString ms = (MyString)o;
       if(this.ch.length!=ms.ch.length) {
           return -1;
       }
       for(int i=0;i<ch.length;i++) {
           if(this.ch[i]==ms.ch[i]) {
               continue;
           }
           return this.ch[i] - ms.ch[i];
       }
       return 0;
    }
    
    public boolean endWith(Object o) {
       protect(o);
       MyString ms = (MyString)o;
       int thisLength = ch.length;
       int oLength = ms.ch.length;
       for(int i=1;i<=ms.ch.length;i++) {
           if(this.ch[thisLength-i]!=ms.ch[oLength-i])  {
               return false;
           }
       }
       return true;
    }
    
    public boolean startWith(Object o) {
       protect(o);
       MyString ms = (MyString)o;
       for(int i=0;i<ms.ch.length;i++) {
           if(this.ch[i]!=ms.ch[i]) {
               return false;
           }
       }
       return true;
    }
    
    public int indexOf(int ch) {
       return indexOf(ch,0);
    }
    private int indexOf(int ch, int  fromIndex) {
       for(int i=fromIndex;i<this.ch.length;i++) {
           if(ch==this.ch[i]) {
               return i;
           }
       }
       return -1;
    }
}

Main MyString_Test

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.hooy.mystring;
import java.util.Scanner;
public class MyString_Test {
    private static Scanner sc = new  Scanner(System.in);
    public static void main(String[] args) {
       char[] ch1 = {'a','b','c'};
       char[] ch2 = {'a','b','c','d'};
       MyString ms1 = new MyString(ch1);
       MyString ms2 = new MyString(ch2);
       System.out.println(ms1.compareTo(ms2));
       
       System.out.println("请输入网址:");
       String url = sc.nextLine();
       MyString ms3 = new  MyString(url.toCharArray());
       MyString ms4 = new  MyString(".com".toCharArray());
       MyString ms5 = new  MyString("www".toCharArray());
       if(ms3.endWith(ms4)) {
           System.out.println(".com是商业网址");
       }
       if(ms3.startWith(ms5)) {
           System.out.println("www是万维网");
       }
       
       System.out.println(ms2.indexOf(99));
       
    }
}
CATALOG