Javaの型の使い方がわからなくなったときに助けになるサイト集

# 〇〇に変換したい
```java
// Date > String
String s = new SimpleDateFormat("yyyy-MM-dd").format(date); // dateがnullだとNullPointerException
// int > BigInteger
BigInteger b = BigInteger.valueOf(1)
// String > float変換
float f = Float.parseFloat("string");
// String > BigDecimal
BigDecimal bigDecimal = new BigDecimal(string)
// String > Double
try {
    Double.parseDouble(s);
} catch (NumberFormatException e) {
    // sが空文字・スペースの場合
} catch (NullPointerException e) {
    // sがnullの場合
}
// String > int
int i = Integer.parseInt(s);
// int > String
String s = Integer.toString(i);
```

|数値型|大きさ|
|:--|:--|
|byte|8ビット整数`-128～127`|
|short|16ビット整数`-32,768～32,767`|
|int|32ビット整数`-2,147,483,648～2,147,483,647`|
|long|64ビット整数`-9,223,372,036,854,775,808～9,223,372,036,854,775,807`|
|float|32ビット単精度浮動小数点数|
|double|64ビット倍精度浮動小数点数|


- [Double (Java Platform SE 6)](https://docs.oracle.com/javase/jp/6/api/java/lang/Double.html#valueOf(java.lang.String))
- [BigDecimal (Java Platform SE 7 )](https://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html)
    - NumberFormatException : val が BigDecimal の有効な文字列表現でない場合
- [intとStringの型変換｜Javaキャスト入門](http://java.it-manual.com/cast/int-String.html)
- [Shortの比較でNullPointerExceptionになって知ったオートボクシング - Qiita](https://qiita.com/ponsuke0531/items/7741098c0efe096bd888)
- [LocalDateとTimestampを変換する方法 - Qiita](https://qiita.com/ponsuke0531/items/943fe1c0f233d3cfd1c0)

```java:整形したい
// 0埋めしたい
String 整形した文字 = String.format("%03d", 数値);
```
- [Java書式付き出力メモ(Hishidama's Java Formatter/Formattable Memo)](http://www.ne.jp/asahi/hishidama/home/tech/java/formatter.html)

# Object
## 似ているけど違うObjectのプロパティをコピーしたい
```java
// import org.apache.commons.beanutils.BeanUtils;
// コピー先, コピー元ともにList<>とかダメです。エラーにはならないけれどコピーしてもらえません。
try {
    BeanUtils.copyProperties(コピー先, コピー元);
} catch (IllegalAccessException e) {
    // コピー先かコピー元がnullの場合
} catch (InvocationTargetException e) {
    // プロパティでなんかダメな場合(いつかどこかでちゃんと確認したい)
}
```

- [Java BeanUtilsメモ(Hishidama's commons-BeanUtils Memo)](http://www.ne.jp/asahi/hishidama/home/tech/apache/commons/beanutil.html)
- [BeanUtils で JavaBeans のプロパティを一気にコピーする | Javable.Jp](http://www.javable.jp/blog/304.html)

# String
## ～で始まる(終わる)か確認したい。
```java
// ～で終わる場合
if (StringUtils.endsWith({確認したい文字列}, "終わりにある文字")) {
    // ～で終わる場合の処理
}

```

- [Apache Commons Lang &#8211; StringUtils（startsWith / endsWith） | TK Factory](http://tk-factory.net/wordpress/?p=1432)

## 抜き出したい
```java:抜き出したい
public String substring(int 開始インデックス (この値を含む), int 終了インデックス (この値を含まない))
```

- [String (Java Platform SE 7)](https://docs.oracle.com/javase/jp/7/api/java/lang/String.html#substring(int, int))
- [Stringクラス（文字列を切り出しする） - Javaちょこっとリファレンス](https://java-reference.com/java_string_cut.html)
- [1分でわかる文字列の一部を切り出しするsubstringの使い方【Java Stringクラス】](https://eng-entrance.com/java-string-substring)
- [文字列の一部を取得(substring) - Stringクラス](https://www.javadrive.jp/start/string_class/index2.html)

## パディングしたい
```java:パディングしたい
// 半角スペース
String.format("%桁数s", パディングする文字);
```

- [Java：ゼロ埋め、半角スペース埋めする方法 | 覚え書き.com](http://write-remember.com/program/java/format/)

## 置換したい
```java:置換したい
stringBuilder.replace(開始インデックス(この値を含む), 終了インデックス(この値を含まない), 対象文字列)
```
- [StringBuilderを使用した文字列操作 - Javaちょこっとリファレンス](https://java-reference.com/java_string_stringbuilder.html)
- [StringBuilder (Java Platform SE 8)](https://docs.oracle.com/javase/jp/8/docs/api/java/lang/StringBuilder.html#replace-int-int-java.lang.String-)
- [該当する全ての文字列を置換する(replaceAll) - Stringクラス](https://www.javadrive.jp/start/string_class/index7.html)

## トリムしたい
```java:全角スペースもトリムしたい
str.trim();
StringUtils.stripStart(str, "　");
StringUtils.stripEnd(str, "　");
```
- [Apache commons-langのStringUtilsで使えそうなものを抜き出してみた - Webサービスで起業を目指すプログラマーblog](http://shinsuke789.hatenablog.jp/entry/20121207/1354849731#stripStart)

## 比較したい
```java:Stringを比較したい
// equals版
A.equals(B);
// compareTo版:辞書的な並び順で返却値が変わる
String str1 = "1";
String str2 = "2";
String str3 = "3";
str2.compareTo(str3); // -1
str2.compareTo(str2); // 0
str2.compareTo(str1); // 1
str2.compareTo(null); // java.lang.String.compareTo(String anotherString) > anotherString.value.length　> NullPointerException
```

- [文字列と文字列の比較 - Stringクラスを使った文字列処理 - Java入門](https://www.javadrive.jp/start/string/index4.html)
- [Java equalsでnullまたは空文字を比較するサンプル | ITSakura](https://itsakura.com/equals_null)


## 文字列を結合したい
```java:文字列を速く結合したい
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(A);
stringBuilder.append(B);
String s = stringBuilder.toString();
```

- [Java で 文字列を生成する場合にどう書くのが速い? - Qiita](http://qiita.com/shintaness/items/bfd64380229cfdc2cbe2#string-%E3%83%AA%E3%83%86%E3%83%A9%E3%83%AB%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E9%80%A3%E7%B5%90)
- 「+=」と「StringBuilder」どっち使うか迷ったら
    - [[Java] Stringの結合について - Qiita](https://qiita.com/yoshi389111/items/67354ba33f9271ef2c68)
    - [JavaのStringについて - Qiita](https://qiita.com/SUZUKI_Masaya/items/47bb767aaef40a51b400)

## いろいろやりたい
```java:特定文字の出現回数を知りたい
int shutsugenCount = (mojiretsu.length() - mojiretsu.replaceAll(tokuteiMoji, "").length()) / tokuteiMoji.length();
```

- [文字列の中で文字列の出現回数を求める【Java】 - asmblrの日記](http://d.hatena.ne.jp/asmblr/20101013/1286989502)

```java:一時パスワードとか用にランダム文字列を生成したい
import org.apache.commons.lang3.RandomStringUtils;
String randamString = RandomStringUtils.random([文字数], [使いたい文字の文字列]);
```

- [ランダム文字列生成 - 技術開発日記](http://kechanzahorumon.hatenadiary.com/entry/2013/05/30/234000)
- [文字列でswitchするときはif-else switchイデオムを使うほうが安全 - きしだのはてな](http://d.hatena.ne.jp/nowokay/20130426)
- [Javaのswitch文でStringを判定する (おさらい) | プロプログラマ](http://propg.ee-mall.info/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/java/java%E3%81%AEswitch%E6%96%87%E3%81%A7string%E3%82%92%E5%88%A4%E5%AE%9A%E3%81%99%E3%82%8B-%E3%81%8A%E3%81%95%E3%82%89%E3%81%84/)
- [IsNullOrEmptyをJavaで使う - Challenge Java EE !](http://kikutaro777.hatenablog.com/entry/20121025/1351185570)
- [isNullOrEmptyぽいもの - Qiita](http://qiita.com/masaki_iwahara/items/b776ff5ccf03e740c88c)
- ログやら何やらに文字を出力したいです。
    - [Java書式付き出力メモ(Hishidama's Java Formatter/Formattable Memo)](http://www.ne.jp/asahi/hishidama/home/tech/java/formatter.html)
- ～ケースにしたいとか変換は大切です。
    - [【Java】文字列を大文字や小文字に変換するtoUpperCase・toLowerCase](http://eng-entrance.com/java-string-touppercase-tolowercase)
    - [CamelCase と snake_case を相互変換する - Qiita](http://qiita.com/y_q1m/items/3c8f21da085ecaace7c3)
- [【Java】StringUtilsのisBlankとisEmptyの違い - Qiita](https://qiita.com/narikei/items/54ec0a0770a5ebf012ec)

# Date
## 比較したい
```java:Dateを比較したい(時間も含めて)
A.compareTo(B);
```
- [【Java入門】Dateクラスで日付の比較(compare)まとめ | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト](http://www.sejuku.net/blog/20714)

```java:Dateを比較したい(時間は含めない)
Date onlyDateA = clearTime(dateWithTimeA);
Date onlyDateB = clearTime(dateWithTimeB);
onlyDateA.compareTo(onlyDateB);

/**
 * 引数の日時の時刻部分をリセットする.
 * @param dateWinthTime 時間が設定されている日付.
 * @return 時刻部分をリセットした日付.
 */
private Date clearTime(Date dateWinthTime) {
    return new Date(DateUtils.truncate(dateWinthTime, java.util.Calendar.DAY_OF_MONTH).getTime());
}
```

- [プロフェッショナルプログラマー: Java 時間, 日付の操作(基本編)](http://atmarkplant-dj.blogspot.jp/2011/06/java.html)
- [Javaで日付だけを比較 - Qiita](https://qiita.com/kazuhirokomoda/items/e5898aa9b6855adf7433)

# double

- [double型のアサーションにおける罠 ｜ Developers.IO](http://dev.classmethod.jp/testing/unittesting/trap-when-double-value-assertion/)
- [Java の double を素直な String にしたい、E 要らない - Qiita](http://qiita.com/k_ui/items/840227f29848b3ad0fbf)
- [Javaでdoubleからintに型変換する際の注意点 | hacknote](http://hacknote.jp/archives/5231/)
- [Doubleクラス - Javaちょこっとリファレンス](http://java-reference.com/java_wrapper_double.html)

# enum
- [内部enumはstatic扱い - Skirnirnismal](http://d.hatena.ne.jp/skirnir/20091209/1260326768)

## enumのswichってdefaultは不要:question:
結局いまいち理解できないのでenumの中身が増えた場合に備えてdefaultを入れました。

- [2009-04-20 - 地平線に行く](http://d.hatena.ne.jp/chiheisen/20090420/1240237787)
- [テックノート  &#8211;  JavaのEnumの比較方法を紹介します](http://javatechnology.net/java/enum-compared/)
- [Java の switch 構文落とし穴 - Status Code 303 - See Other](http://kouki-hoshi.hatenablog.com/entry/2016/01/08/014635)


# 配列的なものの使い方を教えて欲しい
- [Java を使うなら覚えておいて欲しい書き方 - 配列・リスト・マップ - ぐるぐる～](http://bleis-tift.hatenablog.com/entry/20090901/1251800276)
- [List と 配列の相互変換 - Qiita](http://qiita.com/kics/items/a1f002a303298061febf)
- [Java：配列⇔Listの変換方法 | 覚え書き.com](http://write-remember.com/program/java/parsearraytolist/)
- [テックノート  &#8211;  配列からListへ変換、Listから配列へ変換](http://javatechnology.net/java/array-list/)

## 普通の配列
```java:初期化
String hairetsu[] = {"た","と","え", new String()};
// 何も入れられない配列.
String hairetsu[] = new String[0];
```

- [2分でわかる！Java配列の初期化とは？と初期化方法](https://eng-entrance.com/java-array-new)

## List

- [JavaでListの要素を初期化・追加する方法 - Qiita](http://qiita.com/yuki2006/items/be1433c50002cc24603b)
- [Listの最後の要素を取得 - Qiita](http://qiita.com/fieldville/items/8aef65fd0b161167ed5e)
- [java.util.List#subListの誤った用法 - じゃばらの手記](http://d.hatena.ne.jp/jabaraster/20120814/1344927583)
- [「xs.size() == 0 と xs.isEmpty() の違い」のツイートより - 日々常々](http://irof.hateblo.jp/entry/20120906/p1)
- [リストの内容を足し算するラムダを勉強した - Qiita](https://qiita.com/ponsuke0531/items/72c2a838bbdd52886244)

## Map

- [【Java】Mapの基本について - TASK NOTES](http://www.task-notes.com/entry/20151124/1448334000)
- [HashMap (Java Platform SE 8) - putAll](https://docs.oracle.com/javase/jp/8/docs/api/java/util/HashMap.html#putAll-java.util.Map-)


# 型の使い方以外のJava
- [Javaの基本を教えてくれるサイト集 - Qiita](https://qiita.com/ponsuke0531/items/971af69f49825dc0bdab)