0

我正在做一个包含几个单独部分的课堂作业,除了这个之外,我都完成了。我需要从用户那里获取字符串输入并创建一个循环(最好是 for 循环),在每个字符之间插入星号。我完全被这个难住了,所以如果有人能给我一些帮助来开始它,我将不胜感激。

编辑:到目前为止我已经想出了这个

    } else if (choice.equalsIgnoreCase("C")) {
        System.out.print("Enter text here: ");
        String orig = input.nextLine();

        // To use for asterisk insertion
        int x = 1;
        int y = 2;

        for (int length = orig.length(); length > 0;) {
            orig = orig.substring(0,x) + "*" + orig.substring(y);
            x = x + 2;
            y = y + 2;
        }

    } 

它编译得很好,但是当我测试它并输入一些文本时,它在线程“main”java.lang.StringIndexOutOfBoundsException中出现异常:字符串索引超出范围:5

4

1 回答 1

3

您可以对字符串的字符使用 for 循环(见下文),但我会这样做:

str = str.replaceAll("(?<=.)(?=.)", "*");

搜索参数中的正则表达式匹配任意两个字符之间的点,通过使用后瞻和前瞻来实现,每个都断言那里有一个字符。


如果必须使用循环,最简单的代码可能是:

String result = input.isEmpty() ? "" : input.substring(0, 1);
for (int i = 1; i < input.length(); i++)
    result += "*" + input.charAt(i);

有点复杂的第一行迎合了用户输入空白的边缘情况。for 循环已经满足了空白输入,因为终止条件对于空白将始终为假,因此它根本不会迭代。

于 2013-09-28T23:42:31.583 回答