付録A CプログラマのためのJava

A.1 オブジェクト

A.1.1 クラス

Person.java

package mypackage;

import java.util.*;
import java.sql.*;

public class Person {
  private String firstName;
  private String lastName;
  
  public Person(){}
  
  public Person(String fName,String lName){
    firstName=fName;
    lastName=lName;
  }
  public void run(){
    System.out.println("RUN!");
  }
  public String getFirstName() {
    return firstName;
  }
  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }
  public String getLastName() {
    return lastName;
  }
  public void setLastName(String lastName) {
    this.lastName = lastName;
  }
}

A.1.2 継承

Labor.java

package mypackage;

public class Labor extends Person {
  int salary;
  
  @Override
  public void run(){
    System.out.println("RUN RUN!");
  }
  public int getSalary() {
    return salary;
  }
  public void setSalary(int salary) {
    this.salary = salary;
  }
}

A.3 クラスライブラリ

A.3.1 文字列

クラスとして実装し、Eclipse上で「ファイル名を右クリック >>> 実行 >>> Javaアプリケーション」として実行してください(JSPに書き直してもかまいません)。

package mypackage;

import java.util.regex.*;

public class StringTest {
  public static void main(String[] args) {
    StringBuffer sb=new StringBuffer("文字列の始まり");
    if(true) sb.append("場合1");
    else sb.append("場合2");
    sb.append("終わり");
    System.out.println(sb.toString());
    
    String str="<h3>文字列</h3><p>文字列を扱うには(中略)</p>"
              +"<H3>正規表現</h3><P>先に説明したStringや\n(後略)</p>";
    Pattern p=Pattern.compile("(?i:<h3>.*?</h3>)");
    Matcher m=p.matcher(str);
    while(m.find()) System.out.println(m.group());
    
    String[] strs={"aaXbbXX", "cXXd", "eXXXf"};
    for(String s:strs) System.out.println(s.replaceAll("X+","Z"));
    
    String[] strs2={
      "yabuki@example.com",
      "taro@example.org",
      "taro.yabuki@unfindable.net"
    };
    
    for(String s:strs2)
      System.out.println(s.replaceFirst("(.+)@.+\\.(.+)","$1 のドメインは $2"));
    
    Pattern p2=Pattern.compile("(.+)@.+\\.(.+)");
    Matcher m2;
    for(String s:strs2){
      m2=p2.matcher(s);
      m2.find();
      System.out.println(m2.group(1)+" のドメインは "+m2.group(2));
    }
  }
}

A.3.2 暦

CalendarTest.jsp

ICU (International Component for Unicode)を導入していない場合は、最後の部分を削除してください。

<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.util.*,java.text.*,com.ibm.icu.util.JapaneseCalendar"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Calendarの使い方</title>
</head>
<body>
<%
Locale.setDefault(new Locale("ja", "JP"));

//現在の日時を取得
Calendar cal=Calendar.getInstance();

//日付の表示形式を定義し,実際に表示する
DateFormat fmt=DateFormat.getDateInstance(DateFormat.FULL);
out.print("<p>"+fmt.format(cal.getTime())+"</p>");

fmt=new SimpleDateFormat("yyyy-M-d");
out.print("<p>"+fmt.format(cal.getTime())+"</p>");

cal.set(1582, Calendar.OCTOBER, 4);
cal.add(Calendar.DAY_OF_MONTH, 1);
out.print("<p>"+fmt.format(cal.getTime())+"</p>");

//Localeのvariant(3番目)をJPにして利用する(ふつうはLocale("ja","JP"))
Locale.setDefault(new Locale("ja", "JP", "JP"));

//表示形式(Gが年号)
DateFormat format=new SimpleDateFormat("GGGGy年MMMMd日 H時m分s秒 z");

Calendar japImpCal = Calendar.getInstance();
out.print("<p>"+format.format(japImpCal.getTime())+"</p>");

JapaneseCalendar jCal=new JapaneseCalendar(1,JapaneseCalendar.JANUARY,1,0,0,0);
jCal.set(Calendar.ERA,0);  //最初の年号を調べる

com.ibm.icu.text.DateFormatSymbols dfs=new com.ibm.icu.text.DateFormatSymbols(jCal, Locale.JAPANESE);
com.ibm.icu.text.SimpleDateFormat jFormat=new com.ibm.icu.text.SimpleDateFormat("Gy年M月d日 H時m分s秒 z",dfs);

out.print("<p>"+jFormat.format(jCal)+" は "+jCal.getTime()+"です.</p>");

out.print("<p>");
for(String era: dfs.getEras()) out.println(era+" ");
out.print("</p>");
%>
</body>
</html>