Lesson 2
Mastering Nested Loops with Strings
Introduction

Welcome to this hands-on lesson! Today, we’ll explore how to extract specific characters from words in a sentence using Ruby's String class and nested loops. This challenge will enhance your understanding of string manipulation and iteration in Ruby. Let’s dive into the details!

Task Statement

The task is to create a Ruby method that processes a given sentence, identifies words with an even number of characters, and extracts only the odd-indexed characters from those words. The extracted characters should then be combined into a single string, preserving their order in the sentence.

Here’s an example to clarify: Suppose the input sentence is "Ruby is a high-level programming language.":

  • "Ruby" has four characters (even length), so we take its odd-indexed characters: "u" and "y".
  • "is" has an even length, so we take "s".
  • "high-level" also has an even length, so we take "i", "h", "l", "v" and "l".
  • Words like "a", "programming", and "language." have odd lengths, so they are skipped.

The output for this sentence would be "uysihlvl" if the method works correctly.

Let’s break this problem into clear steps to solve it systematically.

Step 1: Splitting the Sentence into Words

The first step is to break the sentence into words. Ruby’s split method separates a string into parts based on spaces, which gives us an array of words. This allows us to process each word individually.

Ruby
1def extract_odd_indexed_chars(sentence) 2 words = sentence.split(' ') 3 # Next, we’ll analyze each word 4end

Here, words is an array containing each word from the sentence.

Step 2: Identifying Words with Even Lengths

Once we have the array of words, we need to check which words have an even number of characters. To do this, iterate through each word and use the even? method to determine if the word’s length is divisible by 2.

Ruby
1def extract_odd_indexed_chars(sentence) 2 words = sentence.split(' ') 3 result = '' # Initialize an empty string to store the result 4 5 words.each do |word| 6 if word.length.even? # Check if the word's length is even 7 # Further steps will go here 8 end 9 end 10end

At this stage, we have the structure in place to identify words with even lengths.

Step 3: Extracting Odd-Indexed Characters

For words with even lengths, we need to extract characters located at odd indices (index 1, 3, 5, etc.). To achieve this, use the step method to iterate through the indices selectively. Append each extracted character to the result string using the << operator for string concatenation.

Ruby
1def extract_odd_indexed_chars(sentence) 2 words = sentence.split(' ') 3 result = '' # Initialize an empty string to store the result 4 5 words.each do |word| 6 if word.length.even? # Check if the word's length is even 7 (1...word.length).step(2) do |index| # Iterate over odd indices 8 result << word[index] # Append odd-indexed character using << 9 end 10 end 11 end 12 13 result 14end 15 16# Example usage 17puts extract_odd_indexed_chars("Ruby is a high-level programming language.") # Outputs: "uysihlvl"

By the end of this step, the result string will contain all the odd-indexed characters from words with even lengths.

Lesson Summary

Great work! You’ve learned how to use nested loops and string manipulation to solve a practical problem. By splitting the sentence, filtering words, and extracting specific characters, you’ve gained hands-on experience with essential Ruby techniques.

Keep practicing similar problems to strengthen your understanding and confidence. Happy coding!

Enjoy this lesson? Now it's time to practice with Cosmo!
Practice is how you turn knowledge into actual skills.