【问题标题】:Implement String.length method by hand手动实现 String.length 方法
【发布时间】:2021-03-17 09:49:23
【问题描述】:

我必须“手动”从String 类实现 .length 方法,我不知道,希望您能以某种方式提供帮助。 不允许使用其他方法或函数,除了:

  1. String.charAt()
  2. String.substring()
  3. String.isEmpty()
  4. 位运算 &,|, &&,||, >,>>>, !=, ==
  5. 算术运算
  6. for 和 while 循环
  7. 递归
  8. if else 语句
  9. 自行创建的方法(int、String、char、boolean 等)
  10. 自创数组。 (没有它们的方法)
static void manual_length2(String length) {
//example String length = "Hello" = 5 letters.
        
        int counter = 0;
        int i = 0;
        char g = ' ';

        while(i <= 4 ) { /*4 is the number i already know */

            g = length.charAt(i);
            counter += 1;
            length.substring(1);
            ++i;

        }

System.out.println(计数器);

控制台:5

这是我的方法,但我被困在 while 语句的终止条件中。 通过示例“Hello”,我已经知道这个词有 5 个字母,但它需要适合所有输入。所以我不知道如何表达 while 语句的边界值。

另一种方法是递归,但是,我问自己如何表达递归的限制。 我该如何表达:

.... lengthMethod1(String length, int ???) {

  if(n == 0) {
     return length.charAt(0);
  }
  else {
     
     return ???? lengthMethod1(length, n - 1);

}

【问题讨论】:

    标签: java string


    【解决方案1】:

    您可以循环直到String 为空,同时在每次迭代中删除第一个字符。

    static int manual_length(String str) {
        int len = 0;
        while(!str.isEmpty()){
           ++len;
           str = str.substring(1);
        }
        return len;
    }
    

    这也可以转换为尾递归方法。

    static int manual_length(String str) {
        return str.isEmpty() ? 0 : 1 + manual_length(str.substring(1));
    }
    

    【讨论】:

      【解决方案2】:

      另一种方法是递归,但是,我问自己我怎么能 表示递归的极限。我该如何表达:

      是的,你可以像这样递归地做:

      static int manual_length(String str, int len) {
              return str.isEmpty() ? len : manual_length(str.substring(1), len + 1);
          }
      

      您使用累加器变量 (ie, len) 来递增,同时从字符串中删除一个字符 (ie, @ 987654322@)。当你到达终点时(str.isEmpty())你返回累加器。

      【讨论】:

      • 将 0 放入参数 len 中,答案是正确的。谢谢!
      猜你喜欢
      • 1970-01-01
      • 2017-05-10
      • 2010-10-04
      • 1970-01-01
      • 2015-04-07
      • 2018-02-15
      • 1970-01-01
      • 2019-08-17
      • 2023-04-09
      相关资源
      最近更新 更多