繁体   English   中英

手动实现 String.length 方法

[英]Implement String.length method by hand

我必须“手动”实现String class 中的 .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. 自创Arrays。 (没有他们的方法)
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);

}

您可以循环直到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));
}

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM