ホーム > カテゴリ > Java・Android >

Javaの基本(コレクション/文字列操作/日付操作/関数オブジェクト) [中級者用]

Javaの使い方(目次)

目次

1. コレクション
2. 文字列操作
3. 日付操作
4. 関数オブジェクト

1. コレクション

Javaでリストを扱うにはコレクションを使用します。コレクションの種類は大きく分けるとList系、Set系、Map系の3種類があります。

List系配列のような基本的なリスト。ArrayList、LinkedListクラスなど。
Set系リストの値は重複しない設計。使用するクラスによって値を取り出す時の順序が異なる。HashSet、TreeSet、LinkedHashSetクラスなど。
Map系キーと値のペアによる連想配列。HashMap、TreeMap、LinkedHashMapクラスなど。

ArrayListの例(List系)

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Main {

    public static void main(String[] args) {;
        
        // 文字列リストの生成
        List<String> list = new ArrayList<String>();
    
        list.add("りんご");
        list.add("ごりら");
        list.add("らっぱ");
        
        // 拡張for文
        for(String str : list) {
            System.out.println(str); 
        }
        System.out.println("---"); 

        // for文
        for(int i=0;i<list.size();i++) {
            System.out.println(list.get(i)); 
        }     
        System.out.println("---"); 
        
        // while文
        Iterator<String> it = list.iterator();        
        while(it.hasNext()) {
            System.out.println(it.next()); 
        }                           
        
        // 整数の場合は次のように使用する
        // ArrayList<Integer> list = new ArrayList<Integer>();
        // list.add(12345);        
    }    
}

結果

りんご
ごりら
らっぱ
---
りんご
ごりら
らっぱ
---
りんご
ごりら
らっぱ

HashSetの例(Set系)

import java.util.HashSet;
import java.util.Set;

public class Main {

    public static void main(String[] args) {;
        
    Set<String> list = new HashSet<String>();
    
        list.add("りんご");
        list.add("ごりら");
        list.add("らっぱ");
        
        // 次の重複した値は登録されない
        list.add("りんご"); 
        
        for(String str : list) {
            System.out.println(str); 
        }
     
    }    
}

結果

りんご
ごりら
らっぱ

HashMapの例(Map系)

import java.util.HashMap;
import java.util.Map;

public class Main {

    public static void main(String[] args) {;
        
    Map<String,Integer> list = new HashMap<String,Integer>();
    
        list.put("りんご",1);
        list.put("ごりら",2);
        list.put("らっぱ",3);
        
        for(String key : list.keySet()) {
            System.out.println(list.get(key)); 
        }
     
    }    
}

結果

1
2
3

2. 文字列操作

次は文字列操作でよく使用される「Stringクラスのメソッド」です。

// 文字列が空の場合にtrueを返す          
boolean isEmpty()

// 文字列の長さを返す          
int length()

// 文字列を比較する
boolean equals(Object anObject)
boolean equalsIgnoreCase(String anotherString)

// 指定した位置の文字を返す
char charAt(int index)          

// 書式付き文字列を返す
static String format(Locale l, String format, Object... args)
static String format(String format, Object... args)

// 文字列を連結する
String concat(String str)
static String join(CharSequence delimiter, CharSequence... elements)
static String join(CharSequence delimiter, Iterable<? extends CharSequence> elements)

// 文字列を検索する
boolean contains(CharSequence s)
boolean startsWith(String prefix)
boolean startsWith(String prefix, int toffset)
boolean endsWith(String suffix)

// 文字列の位置を取得する
int indexOf(int ch)
int indexOf(int ch, int fromIndex)
int indexOf(String str)
int indexOf(String str, int fromIndex)
int lastIndexOf(int ch)
int lastIndexOf(int ch, int fromIndex)
int lastIndexOf(String str)
int lastIndexOf(String str, int fromIndex)

// 文字列を置換する
String replace(char oldChar, char newChar)
String replace(CharSequence target, CharSequence replacement)
String replaceAll(String regex, String replacement)

// 正規表現
boolean matches(String regex)

// 文字列を分割して配列にする
String[] split(String regex)
String[] split(String regex, int limit)

// 文字列を部分的に取得する(切り取る)
String substring(int beginIndex)            
String substring(int beginIndex, int endIndex)

// 大文字小文字に変換する
String toLowerCase toLowerCase()
String toLowerCase toUpperCase()

// 先頭と末尾の空白を削除する
String trim()       

// 文字列のハッシュコードを返す            
int hashCode()

詳細は公式の「APIリファレンス」またはEclipseでCtrl + Spaceキーで表示される「メソッドの解説」をご覧下さい。

文字列の連結

文字列の連結は「+」で可能です。しかし、「+」は文字列の連結処理速度が遅いので"長文"を扱う場合は「StringBuilder」(一般用)または「StringBuffer」(スレッド用)を使用して文字列を連結します。

public static void main(String[] args) {
    String str = "";
    StringBuffer sList1 = new  StringBuffer();
    StringBuilder sList2 = new  StringBuilder();

    str = "プチ" + "モンテ";

    sList1.append("プチ");
    sList1.append("モンテ");

    sList2.append("プチ");
    sList2.append("モンテ");

    System.out.println(str);
    System.out.println(sList1);
    System.out.println(sList2);
}

結果

プチモンテ
プチモンテ
プチモンテ

3. 日付操作

現在の日付/時刻を取得する(Java7以下)

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Main {

  public static void main(String[] args) {
      // 現在の日付を表示する
      Date now = new Date();
      System.out.println(now);

      // 現在の日付を表示する
      Calendar c = Calendar.getInstance();
      c.setTime(now);

      System.out.println(
                      c.get(c.YEAR) + "/" +
                      (c.get(c.MONTH)+1) + "/" +
                      c.get(c.DAY_OF_MONTH) + " " +
                      c.get(c.HOUR_OF_DAY)  + ":" +
                      c.get(c.MINUTE)+ ":" +// 現在の日付を表示する
                      c.get(c.SECOND)
      );

      // 現在の日付を表示する(定番)
      SimpleDateFormat sdm = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
      System.out.println(sdm.format(now));
  }
}

結果

Thu May 03 16:10:03 JST 2018
2018/5/3 16:10:3
2018年05月03日 16:10:03

日付/時間の取得、減算、加算、比較を行う(Java8以降)

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Main {

    public static void main(String[] args) {;

        // ローカルの日付/時刻を取得する
        LocalDate now_date = LocalDate.now();
        LocalDateTime now_time = LocalDateTime.now();

        // 2018/3/8の日付を生成する
        LocalDate ld = LocalDate.parse("2018/03/08",
                         DateTimeFormatter.ofPattern("yyyy/MM/dd"));

        System.out.println(now_date.toString());
        System.out.println(now_time.toString());

        // 2018/3/8に1日を減算する
        LocalDate previousday = ld.minusDays(1);
        System.out.println(previousday.toString());

        // 2018/3/8に1日を加算する
        LocalDate nextday = ld.plusDays(1);
        System.out.println(nextday.toString());

        // 日付の比較
        if(ld.isAfter(previousday)) {
            System.out.println(previousday.toString() + "は" + ld.toString()+"より前の日付です。");
        }

        if(ld.isBefore(nextday)) {
            System.out.println(nextday.toString() + "は" + ld.toString()+"より後の日付です。");
        }
        
        if(ld.equals(ld)) {
            System.out.println(ld.toString() + "は" + ld.toString()+"と同じ日付です。");
        }
    }
}

結果

2018-05-03
2018-05-03T18:37:30.998
2018-03-07
2018-03-09
2018-03-07は2018-03-08より前の日付です。
2018-03-09は2018-03-08より後の日付です。
2018-03-08は2018-03-08と同じ日付です。

タイムゾーン付きの日付/時間を取得、比較する(Java8以降)

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class Main {

    public static void main(String[] args) {;

      // ローカルの日付/時刻を取得する
      LocalDateTime now = LocalDateTime.now();
      
      // 東京の日付/時刻を取得する
      ZonedDateTime z1 = ZonedDateTime.of(now,ZoneId.of("Asia/Tokyo"));
      
      // ロサンゼルスの日付/時刻を取得する
      ZonedDateTime z2 = z1.toInstant().atZone(ZoneId.of("America/Los_Angeles"));
      
      // 東京
      System.out.println("東京 " +
                           z1.getYear() + "年" +
                           z1.getMonthValue() + "月" +
                           z1.getDayOfMonth() + "日 " +
                           z1.getHour() + ":" +
                           z1.getMinute() + ":" +
                           z1.getSecond()                 
                          );
      
      // ロサンゼルス
      System.out.println("ロサンゼルス " +
                z2.getYear() + "年" +
                z2.getMonthValue() + "月" +
                z2.getDayOfMonth() + "日 " +
                z2.getHour() + ":" +
                z2.getMinute() + ":" +
                z2.getSecond()                 
                );
      
      if(z1.isEqual(z2)) {
          System.out.println("同一の日付/時刻です。");
      }else {
          System.out.println("日付/時刻が異なります");
      }
    }    
}

結果

東京 2018年5月3日 18:39:52
ロサンゼルス 2018年5月3日 2:39:52
同一の日付/時刻です。

日付の差分を求める(Java8以降)

import java.time.LocalDate;
import java.time.Period;

public class Main {

    public static void main(String[] args) {;

        LocalDate d1 = LocalDate.of(2018,3,1);
        LocalDate d2 = LocalDate.of(2018,3,8);
        
        Period p = Period.between(d1, d2);
        
        // 日付の差分を取得する
        System.out.println(p.getDays());
    }    
}

結果

7

4. 関数オブジェクト(関数ポインタ)

次はメソッドを変数で参照、実行します。

// メソッドの型を作成する(インターフェース)
interface MyFunction {
    int run(int a,int b);
}

public class Main {
   
   // メソッドの実体を作成する
   public static int sub(int a,int b) {
       return (a+b);
   }
   
   public static void main(String[] args) {;
        
       // メソッドの参照(ポインタ)を取得する
       MyFunction my = Main::sub;
        
       // メソッドを実行する
       System.out.println(my.run(1,2));
   }    
}

結果

3





関連記事



公開日:2018年05月04日 最終更新日:2018年05月05日
記事NO:02643