#変更可能文字列の操作を行う
- StringBuilderクラスのメソッド
- サンプルコードです
- 追加・挿入・置換・削除・反転
public class Main {
public static void main(String[] args) {
StringBuilder sb1 = new StringBuilder("MohuMohuNekoSan");
StringBuilder sb2 = new StringBuilder("MohuiNekoSanMohui");
StringBuilder sb3 = new StringBuilder("あめんぼ赤いな");
//末尾に"***"を追加
System.out.println(sb1.append("^・ェ・^"));//MohuMohuNekoSan^・ェ・^
//インデックス番号1(2文字目)に"***"を挿入
System.out.println(sb1.insert(1, "ooo")); //MoooohuMohuNekoSan^・ェ・^
//インデックス番号15~18を Sama に置換する
System.out.println(sb1.replace(15, 18, "Sama")); //MoooohuMohuNekoSama^・ェ・^
//インデックス番号3を'-'に置換
//setCharAtは戻り値voidなのでそのままplintlnしないよう注意!
sb1.setCharAt(3, '-');
System.out.println(sb1); //Moo-ohuMohuNekoSama^・ェ・^
//System.out.println(sb1.setCharAt(3, '*')); //Main.java:30: error: void cannot be dereferenced
//インデックス番号0~7を削除
System.out.println(sb1.delete(0,7)); //MohuNekoSama^・ェ・^
//インデックス番号3を削除する
System.out.println(sb1.deleteCharAt(3)); //MohNekoSama^・ェ・^
//インデックス番号3を取得
System.out.println(sb1.charAt(3)); //N
//"CD"が一番最初に出現するインデックス番号を取得する
System.out.println(sb2.indexOf("Mohui"));//0
System.out.println(sb2.indexOf("hoge")); // -1
//インデックス番号5以降で"Mohui"が最初に出現するインデックス
System.out.println(sb2.indexOf("Mohui", 5)); //12
//"Mohui"が一番最後に出現するインデックス番号を取得する
System.out.println(sb2.lastIndexOf("Mohui")); //12
//インデックス番号10(11文字目)以前で"CD"が最後に出現するインデックス番号を取得する
System.out.println(sb2.lastIndexOf("Mohui", 5)); //0
//文字数を取得する
System.out.println(sb3.length());// 7
//文字列を反転
System.out.println(sb3.reverse()); //ない赤ぼんめあ
//インデックス番号3以降の文字列を取得
System.out.println(sb3.substring(3)); //ぼんめあ
//インデックス番号0~3の文字列を取得
System.out.println(sb3.substring(0, 3)); //ない赤
//StringBuilderをString型に変換
System.out.println(sb3.toString()); //ない赤ぼんめあ
}
}
#文字列変換(ITP1-9)
文字列 str に対して、与えられた命令の列を実行するプログラムを作成してください。命令は以下の操作のいずれかです:
- print a b: str の a 文字目から b 文字目までを出力する。
- reverse a b: str の a 文字目から b 文字目までを逆順にする。
- replace a b p: str の a 文字目から b 文字目までを p に置き換える。
ここでは、文字列 str の最初の文字を 0 文字目とします。
-- Input
1 行目に文字列 str が与えられます。str は英小文字のみ含みます。2 行目に命令の数 q が与えられます。続く q 行に各命令が上記の形式で与えられます。
-- Output
各 print 命令ごとに文字列を1行に出力してください。
-- Constraints - 1≤strの長さ≤1000
- 1≤q≤100
- 0≤a≤b<strの長さ0≤a≤b<strの長さ
- replace 命令では 長さb−a+1=pの長さ
-- Sample Input 1
abcde
3
replace 1 3 xyz //axyze
reverse 0 2 //yxaze
print 1 4 //xaze
-- Sample Output 1
xaze
import java.util.*;
class Main {
public static void main(String args[]) {
try (Scanner sc = new Scanner(System.in)) {
StringBuilder S = new StringBuilder(sc.next());
int N = sc.nextInt();
for (int i = 0; i < N; i++) {
String operator = sc.next();
int a = sc.nextInt(), b = sc.nextInt() + 1;
if (operator.equals("print")) {
System.out.println(S.substring(a, b));
} else if(operator.equals("reverse")) {
S.replace(a, b, (new StringBuilder(S.substring(a, b))).reverse().toString());
} else {
String x = sc.next();
S.replace(a, b, x);
}
}
}
}
}