简体   繁体   中英

Implement String.length method by hand

I have to implement the.length method from String class "by hand" and I have no idea and hope you can help somehow. No other methods or functions are allowed, than:

  1. String.charAt()
  2. String.substring()
  3. String.isEmpty()
  4. Bit-operations &,|, &&,||, <<, >>,>>>, ,=, ==
  5. Arithmetic operations
  6. for and while Loop
  7. recursion
  8. if else statement
  9. self created methods (int,String,char,boolean etc.)
  10. self-created Arrays. (no Methods of them)
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(counter);

Console: 5

This was my approach, but I'm stuck in the while statement's condition to terminate. With the example "Hello" i already know that this word has 5 letters, but it needs to fit for all inputs. So i don't know how to express to border-value of the while statement.

Another approach is by recursion, but also, i ask myself how can i express the limit of the recursion. How can i express:

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

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

}

You can loop until the String is empty while removing the first character on each iteration.

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

This can be converted to a tail-recursive method as well.

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

Another approach is by recursion, but also, i ask myself how can i express the limit of the recursion. How can i express:

Yes, you can do recursively like this:

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

You use an accumulator variable ( ie, len ), that you increment, while removing a char from the string ( ie, str.substring(1) ). When you reach the end ( ie, str.isEmpty() ) you return the accumulator.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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