paizaでの勉強記録です。
今回は下記のレベルアップ問題集のCランク問題の「文字列の抽出」を実施しました。
区切り文字で区切られた文字が空文字の場合の処理で、処理済みの文字の場所を示すiの値を更新する処理を入れ忘れてしまい、一度空文字がでた後永遠に同じ場所を見続けて標準出力で<blank>を吐き続けるようになりエラーになってしまってました、、、
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 区切り文字の開始の文字
String startSeparator = sc.next();
// 区切り文字の終了の文字
String endSeparator = sc.next();
// 標準入力で受け取った処理対象文字列
String inputString = sc.next();
// 処理対象文字列内の区切り文字で区切られた文字列
String targetString;
// 区切り文字の総文字数
int tagCharCount = startSeparator.length() + endSeparator.length();
// 未処理の文字列の文字数用変数
// ループ処理の初期条件用に最初は取得文字列を代入する
int remainCharCount = inputString.length();
// 処理が終了した区切り文字の次の区切り文字の位置を取得するための変数
int i = 0;
while (true) {
// 未処理の文字列の文字数が区切り文字の総文字数以上の場合処理を継続する
// 以下の場合、ループ処理を抜ける
if (remainCharCount>=tagCharCount) {
// 区切り文字の位置を取得
int startSeparatorIndex = inputString.indexOf(startSeparator,i);
int endSeparatorIndex = inputString.indexOf(endSeparator,i);
// 未処理の文字数の取得
remainCharCount = inputString.length() - (endSeparatorIndex + endSeparator.length());
// 残りの文字列に区切り文字がある場合、処理を継続する
// ない場合、ループ処理を抜ける
if (startSeparatorIndex != -1) {
targetString = inputString.substring(startSeparatorIndex+startSeparator.length(), endSeparatorIndex);
// 区切り文字で区切られた文字列が空文字かを判定する
if (targetString.equals("")) {
System.out.println("<blank>");
i = endSeparatorIndex+endSeparator.length();
} else {
System.out.println(targetString);
i = endSeparatorIndex+endSeparator.length();
}
} else {
break;
}
} else {
break;
}
}
sc.close();
}
}
参考