似乎无法克隆字符串

时间:2016-03-20 19:31:07

标签: java bufferedreader stringbuilder

我在学校有这个分配来检查输入字符串(通过BufferedReader),如果该字符串包含任何元音(例如,在我的语言中,a,ā,e,ē等),如果它们在那里,你必须把在元音之后的字符'p',甚至在'p'字符后你必须放入那个元音,然后插入'p'。

听起来像这样:dog => dopog;蜗牛=> snapaipils等。 事情是 - 我让它工作,以便这个字符'p'在正确的位置,但我不能把这个元音放在字符'p'之后。

现在我好像,狗=> DOPG。

在我的代码中:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Ld2151rdb255 {

    static char[] patskani = { 'a', 'ā', 'e', 'ē', 'i', 'ī', 'u', 'ū', 'o' };
    static char character;
    static StringBuilder input;

    public static void main(String[] args) {
        char charAtPosition;

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        try {
            String valueEntered = br.readLine();
            valueEntered = valueEntered.toLowerCase();
            input = new StringBuilder(valueEntered);

            // should use "String.contain"
            for (int i = 0; i < input.length(); i++) {
                for (int j = 0; j < patskani.length; j++) {
                    charAtPosition = input.charAt(i);
                    if (charAtPosition == patskani[j]) {
                        input.insert(i + 1, 'p');
                        // input.insert(i + 2, charAtPosition);

                    }
                }
            }
        } catch (IOException e) {
            System.out.println("input-output error");
        }
        // Rezultātu izvade
        String result = input.toString();
        System.out.println(result);
    }
}

我尝试输入input.insert(i + 2,charAtPosition);但是 - 它闻起来像IndexOutOfBoundary异常。无论如何,我确实如何改变索引以及我接近完成任务的方法。

不要太担心对象'patskani'。只是用我的语言'元音'。

任何帮助都会受到赞赏,因为我有点卡在那里,不知道是否有办法只是通过继续或我必须重写逻辑。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我建议您逐步构建输出,这将更容易。 因此,获取char,将其添加到输出中,检查它是否为patskani,如果是,则附加 p

input = new StringBuilder(); // should be named output most likely    

for (int i = 0; i < valueEntered.length(); i++) {
    // get the i-th char
    charAtPosition = valueEntered.charAt(i);
    // append this char to "output"
    input.append(charAtPosition);
    // check if the char is in "patskani"
    for (int j = 0; j < patskani.length; j++) {
        if (charAtPosition == patskani[j]) {
            // if so, append a "p" and no need to continue checking
            input.append('p');
            break;
        }
    }
}

类似的东西(demo here)。作为旁注,请注意,有一些名为enhanced for loop的东西可以派上用场。