StringBuilderメモ

可変な文字列であるStringBuilder。文字列を高速に連結するのに使うらしいです。
今回もStringBuilderのメソッドを使用して、使い方を学んでいきます。


#append
appendを使って文字列の追加処理が可能です。
boolean型、char型、String型、配列などいろんな型を文字列として追加することができます。

```java
StringBuilder sb = new StringBuilder("おはよう");

//boolean
boolean bool = true;
System.out.println(sb.append(bool));

//char
char c = 'A';
System.out.println(sb.append(c));


StringBuilder sbr = new StringBuilder("Aさん");

//配列
String[] str = {"こんにちは","おやすみ"};
System.out.println(sbr.append(str[0]));
System.out.println(sbr.append(str[1]));

StringBuilder s = new StringBuilder("Aさん");

//int,double,float,long
int i = 100;
double d = 100;
float f = 100;
long l = 100;
System.out.println(s.append(i));
System.out.println(s.append(d));
System.out.println(s.append(f));
System.out.println(s.append(l));
```
```java
//boolean
おはようtrue
//char
おはようtrueA
//配列
Aさんこんにちは
Aさんこんにちはおやすみ
//int
Aさん100
//double
Aさん100100.0
//float
Aさん100100.0100.0
//long
Aさん100100.0100.0100
```

#charAt(int index)
このシーケンス内の指定されたインデックスのchar値を返します。

```java
StringBuilder sb = new StringBuilder("ABCDs");

System.out.println(sb.charAt(0));
System.out.println(sb.charAt(2));
System.out.println(sb.charAt(4));
```
```java
A
C
s
```

#delete(int start, int end)
このシーケンスの部分文字列内の文字を削除します。
start - 開始インデックス(この値を含む)。
end - 終了インデックス(この値を含まない)。

```java
StringBuilder sb = new StringBuilder("ABCDs");

sb.delete(1, 3);
System.out.println(sb);
```
```java
ADs
```

#deleteCharAt(int index)
このシーケンス内の指定された位置にあるcharを削除します。

```java
StringBuilder sb = new StringBuilder("ABCDs");

sb.deleteCharAt(2);
System.out.println(sb.toString());
```
```java
ABDs
```

#indexOf(String str)
この文字列内で、指定された部分文字列が最初に出現する位置のインデックスを返します。

```java
StringBuilder sb = new StringBuilder("ABCDs");

System.out.println(sb.indexOf("C"));
System.out.println(sb.indexOf("s"));
```
```java
2
4
```

#indexOf(String str, int fromIndex)
指定されたインデックス以降で、指定された部分文字列がこの文字列内で最初に出現する位置のインデックスを返します。

```java
StringBuilder sb = new StringBuilder("ABCDsD");

System.out.println(sb.indexOf("D",2));
System.out.println(sb.indexOf("s",0));
```
```java
3
4
```

#lastIndexOf(String str)
この文字列内で、指定された部分文字列が一番右に出現する位置のインデックスを返します。

```java
StringBuilder sb = new StringBuilder("ABCDssD");

System.out.println(sb.lastIndexOf("D"));
System.out.println(sb.lastIndexOf("s"));
```
```java
6
5
```

#length()
長さ(文字数)を返します。

```java
StringBuilder sb = new StringBuilder("ABCDssD");

System.out.println(sb.length());
```
```java
7
```

#replace(int start, int end, String str)
このシーケンスの部分文字列内の文字を、指定されたString内の文字で置き換えます。

```java
StringBuilder sb = new StringBuilder("ABCDssD");

System.out.println(sb.replace(2, 5, "r"));
```
```java
ABrsD
```

#reverse()
この文字シーケンスを、シーケンスの順序を逆にしたもので置き換えます。

```java
StringBuilder sb = new StringBuilder("ABCDssD");

System.out.println(sb.reverse());
```
```java
DssDCBA
```

#setCharAt(int index, char ch)
指定されたインデックスの文字がchに設定されます。

```java
StringBuilder sb = new StringBuilder("ABCDssD");

sb.setCharAt(1, 's');
System.out.println(sb.toString());
```
```java
AsCDssD
```

#setLength(int newLength)
文字シーケンスの長さを設定します。

```java
StringBuilder sb = new StringBuilder("ABCDssD");

System.out.println(sb.length());
sb.setLength(20);
System.out.println(sb.length());
```
```java
7
20
```

#subSequence(int start, int end)
このシーケンスのサブシーケンスである新規文字シーケンスを返します。
start - 開始インデックス(この値を含む)。
end - 終了インデックス(この値を含まない)。

```java
StringBuilder sb = new StringBuilder("ABCDssD");

System.out.println(sb.subSequence(0, 2));
System.out.println(sb.subSequence(4, 5));
```
```java
AB
s
```

#substring(int start), substring(int start, int end)
この文字シーケンスに現在含まれている文字の部分シーケンスを含む新しいStringを返します。

```java
StringBuilder sb = new StringBuilder("ABCDssD");

System.out.println(sb.substring(2));
System.out.println(sb.substring(5));

System.out.println(sb.substring(5,6));
System.out.println(sb.substring(0,2));
```
```java
CDssD
sD

s
AB
```

#insert
指定インデックスに指定した値を挿入する

```java
StringBuilder sb = new StringBuilder("ABCDssD");

//0番目に'P'を挿入する
sb.insert(0, 'P');
System.out.println(sb.toString());
//8番目に23を挿入する
sb.insert(8, 23);
System.out.println(sb.toString());
int[] i = {10,20,30,40};
//0番目にi配列のインデックス2を挿入する
sb.insert(0, i[2]);
System.out.println(sb.toString());
```
```java
PABCDssD
PABCDssD23
30PABCDssD23
```

#capacity()
現在の容量を返します。

```java
StringBuilder s = new StringBuilder();
//初期容量が16文字
System.out.println(s.capacity());
//初期容量16 + 追加14文字で現在の容量が30文字
StringBuilder sb = new StringBuilder("ABCDssDAAAAAAA");
System.out.println(sb.capacity());
```
```java
16
30
```

#trimToSize()
この文字シーケンスで使用されているストレージの低減を試みます。

```java
StringBuilder sb = new StringBuilder("A");
//初期容量16 + 追加1文字で現在の容量が17文字
System.out.println(sb.capacity());
//初期容量分の16文字が削除され、1文字
sb.trimToSize();
System.out.println(sb.capacity());

StringBuilder s = new StringBuilder("AAAAAAAAAA");
//初期容量16 + 追加10文字で現在の容量が26文字
System.out.println(s.capacity());
//初期容量分の16文字が削除され、10文字
s.trimToSize();
System.out.println(s.capacity());
```
```java
17
1

26
10
```