0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Java】変更可能文字列の操作(AOJ15 - 文字列変換)

Posted at

#変更可能文字列の操作を行う

  • 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);
                }
            }
        }
    }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?