Archive for 九月, 2009

30th
九月

Java SE简记(17): 数组
马克龙 发布于: 2009年09月30日 开发与应用 标签:, 评论 (0)

public class Array {
  public static void main(String args[]) {
    /*
    Java的数组是引用类型,声明数组时不能指定其长度,其元素可以是基础类型也可以是引用类型。
    */
    dynamicInit();
 
    staticInit();
 
    defaultValue();
 
    twoDimensionalArray();
  }
 
  private static void dynamicInit() {
    /*
    动态初始化数组: 数组定义 与 空间分配和元素赋值 分开进行
    */
    int a[];//数组定义;
    a = new int[3];//分配空间
    for (int i=0; i<3; i++)
      a[i] = i;//对元素赋值
 
    Person b[];//数组定义
    b = new Person[3];//分配空间
    for (int j=0; j<3; j++)
      b[j] = new Person(j);//对元素赋值
  }
 
  private static void staticInit() {
    /*
    静态初始化数组
    */
    int a[] = {0, 1, 2};//数组定义 与 空间分配和元素赋值 同时进行
 
    Person b[] = {new Person(0), new Person(1), new Person(2)};
  }
 
  private static void defaultValue() {
    /*
    数组被分配空间后,
    */
    int a[] = new int[3];
    System.out.println(a[2]);//0
 
    Person b[] = new Person[3];
    System.out.println(b[2]);//null
 
    boolean c[] = new boolean[3];
    System.out.println(c[2]);//false
 
    double d[] = new double[3];
    System.out.println(d[2]);//0.0
  }
 
  private static void twoDimensionalArray() {
    /*
    二维数组的声明和初始化须从一维到二维的顺序进行
    */
    int a[][] = new int[3][];
    a[0] = new int[2];
    a[1] = new int[3];
    a[2] = new int[2];
 
    //int a[3][2];ERROR!!!
    //int a[][] = new int[][3];//ERROR!!!
  }
}
 
class Person {
  public int age;
 
  Person(int age) {
    this.age = age;
  }
}
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.io.*;
 
public class EmailSpider {
  public static void main(String args[]) {
    /*
    使用正则表达式抓取并打印网页源代码中的所有邮件
    */
    try {
      BufferedReader br = new BufferedReader(new FileReader("test.htm"));
      String line = null;
 
      while ((line=br.readLine()) != null) {
        parse(line);
      }
    } catch(FileNotFoundException e) {
      e.printStackTrace();
    } catch(IOException e) {
      e.printStackTrace();
    }
  }
 
  private static void parse(String line) {
    //参见 RFC2821, RFC2822
    Pattern p = Pattern.compile("[a-zA-Z](\\w*[-_]?\\w+)*@(\\w*[-_]?\\w+)+\\.[a-zA-Z]{2,3}(\\.[a-zA-Z]{2})?");
    //Pattern p = Pattern.compile(\\w+([-.+]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*);
    Matcher m = p.matcher(line);
    while (m.find()) {
      System.out.println(m.group());
    }
  } 
}
import java.util.regex.Pattern;
import java.util.regex.Matcher;
 
public class BackReference {
  public static void main(String args[]) {
    test_1();
    test_2();
    test_3();
  }
 
  private static void test_1() {
    Pattern p = Pattern.compile("(\\d\\d)\\1");
    Matcher m = p.matcher("1212");//12与12相同
    System.out.println(m.matches());//true
  }
 
  private static void test_2() {
    Pattern p = Pattern.compile("(\\d(\\d))\\2");
    Matcher m = p.matcher("1212");//1与2不同
    System.out.println(m.matches());//false
  }
 
  private static void test_3() {
    Pattern p = Pattern.compile("(\\d(\\d))\\2");
    Matcher m = p.matcher("122");//2与2相同
    System.out.println(m.matches());//true
  }
}