Java 学习第二天

JOptionPane 类

  • 导入包
    1
    import javax.swing.JOptionPane;
  • showMessageDialog
    1
    JOptionPane.showMessageDialog(null, x, y, JOptionPane.INFORMATION_MESSAGE);
    • 第一个参数总是 null
    • x 是要显示的字符串
    • y 是消息对话框的标题
    • JOptionPane.INFORMATION_MESSAGE 是图标
  • showInputDialog
    1
    String string = JOptionPane.showMessageDialog(null, x, y, JOptionPane.INFORMATION_MESSAGE);
    • x 是提示字符串
    • y 是标题字符串
    • 返回的是字符串, 若需要其它类型需要转换, 如
      1
      int intValue = Integer.parseInt(string); 

String

1
String str = "ljguo";

创建及使用

String 类有很多构造方法, 例如接受字符串, 字符数组等.

1
2
3
String str = new String("my name is ljguo");
char[] charArray = {'l', 'j', 'g', 'u', 'o'};
String str = new String(charArray);

诸如 "ljguo" 这种称为字符串直接量, java 为了提高效率和节约内存, 对具有相同字符串序列的字符串直接量使用同一实例(对象), 也即

1
2
3
4
5
6
7
String str1 = "ljguo";
String str2 = "ljguo";
String str3 = new String("ljguo");
/*
str1 == str2 : true
str1 == str3 : false
*/

这是因为 str1str2 在用 == 进行比较的时候比较的是引用值(类似于地址), 而二者指向同一对象, 故它们的引用值是相等的.
String 类还提供了一些方法

  • equals(s: String): boolean 比较两个字符串对象所指的字符串是否相等, 继承自 Object.
  • equalsIgnoreCase(s: String): boolean 忽略大小写的 equals.
  • compareTo(s: String): int 比较字符串, 返回一个 int.
  • startsWith(prefix: String): boolean, 返回一个 boolean, 用于检测该字符串是否以 prefix 为前缀.
  • endsWith(suffix: String): boolean, 返回一个 boolean, 用于检测该字符串是否以 suffix 为后缀.
    此外还有一些方法, 例如: toLowerCase, replace, replaceFirst, replaceAll, split, matches等, 他们都支持以正则表达式进行匹配, 更多的方法参考API.

类型转换

  • Integer.parseInt(s: String): int 将字符串转换为整数, 这是Integer类提供的方法, 其他基本类型对应的包装类也都提供了对应的方法
  • valueOf() 将其他基本数据转换为字符串.
  • toCharArray() 将字符串转换为字符数组.

StringBuilder和StringBuffer类

这两个类用来代替 String 类, 处理可变长字符串.

1
2
3
StringBuffer str1 = new StringBuffer(); // 创建长度为 16 的生成器
StringBuffer str2 = new StringBuffer(10); // length: 10
StringBuffer str3 = new StringBuffer("ljguo"); // length: "ljguo".length();

方法

  • append(d: char[]) 添加 char 数组
  • append(s: String) 添加字符串
  • append(d: char[], offset: int, length: int)
  • append(v: aPrimetiveType) 添加基本类型
  • insert(), charAt(), deleteCharAt(), reverse()
  • capacity() 返回生成器容量, 区分 length()
  • trimTosize() 可以将容量降低到实际长度(用于节省内存)

Students 类(待更新)

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
package Students;

public class Students {
private String[] elements;
private int STUDENTS_SIZE = 5;
private int numberOfStudents = 0;
public Students() {
elements = new String[STUDENTS_SIZE];
}

public void push(String name) {
if (numberOfStudents >= STUDENTS_SIZE) {
String[] temp = new String[2 * STUDENTS_SIZE];
STUDENTS_SIZE *= 2;
System.arraycopy(elements, 0, temp, 0, elements.length);
elements = temp;
}
elements[numberOfStudents++] = name;
}

public int getNumberOfStudents() {
return numberOfStudents;
}

public String getStudent(int index) {
if(index < numberOfStudents){
return elements[index];
}else {
throw new ArrayIndexOutOfBoundsException("Index " + index + " out of bounds for length " + numberOfStudents);
}

}

public String toString() {
StringBuilder tem = new StringBuilder();
for (int i = 0; i < numberOfStudents; i++) {
if (i < numberOfStudents - 1)
tem.append(elements[i]).append(",");
else
tem.append(elements[i]);
}
return "[" + tem +"]";
}

public String pop() {
return elements[--numberOfStudents];
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import Students.*;

import java.util.ArrayList;
import java.util.Date;

public class StudentsTest {
public static void main(String[] args) {

Students st = new Students();
st.push("ljguo");
st.push("张三");
st.push("李四");
st.push("王二麻子");
st.push("王八蛋");
st.push("狗头");
st.push("二蛋子");

System.out.println(st.getStudent(5));
System.out.println(st.getNumberOfStudents());

System.out.println(st.pop());
System.out.println(st);
}
}
1
2
3
4
狗头
7
二蛋子
[ljguo,张三,李四,王二麻子,王八蛋,狗头]