ホーム > カテゴリ > 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


この記事を書いた人

💻 ITスキル・経験
サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。

画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ
プチモンテ代表、アーティスト名:プチモンテ
🎵 音楽制作
BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は叙情詩、叙情的な楽曲が多い。楽曲制作は2023年12月中旬 ~

オリジナル曲を始めました✨

YouTubeで各楽曲を公開しています🌈
https://www.youtube.com/@petitmonte

【男性ボーカル】DA・KA・RA | 新たな明日が風と共に訪れる

【男性、女性ボーカル】時空を超越する先に | 時空と風の交響曲

【女性、男性ボーカル】絆 | 穏やかな心に奏でる旋律