【问题标题】:Java - For Loop to insert asterisks between characters of a user inputted stringJava - For循环在用户输入字符串的字符之间插入星号
【发布时间】:2013-10-05 16:37:49
【问题描述】:

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

【问题讨论】:

  • 不使用子字符串,通过将原始字符串的每个字符后跟星号(最后一个除外)附加到 StringBuilder 来简单地重新创建新字符串会更容易、直观和高效.当然,除了第一个字符之外,您当然也可以在每个字符之前附加一个星号。
  • 唯一的问题可能是我们还没有学会如何使用 StringBuilder 所以我不确定我是否应该使用那个方法。此外,示例输出将第一个星号放在第一个字符之后,最后一个星号放在最后一个字符之后。 IE; h
  • 我认为我收到的错误是我只需要找到一种方法来告诉循环何时停止执行此过程,因为它即将结束然后搞砸了?
  • StringBuilder 是一个与所有其他类一样的类。它具有公共方法和公共 javadoc。如果您的老师不接受您可以自己找到课程并阅读其文档的事实,那么所有希望都将落空。您当然可以选择仅使用 STring,方法是创建一个字符数组和 String 构造函数。
  • 我一直在争论如何使用 StringBuilder,因为查找如何将字符插入字符串已经让我多次使用它。它似乎更容易使用,我想我会用它。感谢您的建议。

标签: java loops substring outofrangeexception


【解决方案1】:

除非必须,否则不要重用变量。只会让代码更复杂,更难阅读。

    String orig = "my test";
    StringBuilder result = new StringBuilder();

    for (int i = 0; i < orig.length() -1;i++) {
        result.append(orig.charAt(i));
        result.append('*');
    }
    result.append(orig.charAt(orig.length()-1));

【讨论】:

    【解决方案2】:

    您的 for 循环没有有效的终止子句。

    for (int length = orig.length(); length > 0;)
    

    将无限期运行,直到引发异常。

        System.out.print("Enter text here: ");
        String orig = input.nextLine();
    
        for (int length = orig.length() - 1; length > 0; length--) {
            orig = orig.substring(0,length) + "*" + orig.substring(length);
        }
    

    生产

    Enter text here: TestOutput T*e*s*t*O*u*t*p*u*t
    

    如果你想在最后一个 't' 后面加上 *,你可以通过删除 for 循环中的“- 1”轻松添加它。

    【讨论】:

      【解决方案3】:

      试试这个程序在字符串的每个字符之间添加星号。

      int leng;
      Scanner sc= new Scanner(System.in);
      System.out.println("enter the name");
      String name=sc.nextLine();
      leng=name.length();
      char c[]=new char[leng];
      for(int i=0;i<=leng-1;i++){
          c[i]=name.charAt(i);
      
          System.out.print(c[i]);
          if(i<leng-1)
              System.out.print("*");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-13
        • 1970-01-01
        相关资源
        最近更新 更多