【问题标题】:Java - Adding Asterisks between a user inputted stringJava - 在用户输入的字符串之间添加星号
【发布时间】:2013-09-28 23:37:34
【问题描述】:

我正在做一个包含几个单独部分的课堂作业,除了这个之外,我都完成了。我需要从用户那里获取字符串输入并创建一个循环(最好是 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;
        }

    } 

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

【问题讨论】:

  • 到目前为止您尝试了哪些方法,您在哪里遇到了麻烦?另外,为什么“(最好是for循环)”?为什么你使用什么样的循环很重要?
  • 这是一个循环赋值。我们需要使用 while、do-while 和 for 循环。 for 循环是我唯一没有使用过的循环。我知道我需要使用 .substring(x,y) 方法,但我不确定如何设置它,以便循环在用户输入的字符串的每个字符之间插入星号。

标签: java string loops for-loop input


【解决方案1】:

您可以对字符串的字符使用 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-10-05
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
  • 2015-03-13
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多