Bird
Raised Fist0
Rubyprogramming~5 mins

String slicing and indexing in Ruby

Choose your learning style10 modes available
Introduction
String slicing and indexing let you pick out parts or single characters from a string, like cutting a piece from a loaf of bread.
You want to get the first letter of a name to make initials.
You need to extract a word from a sentence.
You want to check or change a specific character in a password.
You want to get a substring from a longer text for display.
Syntax
Ruby
string[index]
string[start, length]
string[range]
Indexing starts at 0 for the first character.
Negative indexes count from the end (-1 is last character).
Examples
Get single characters by index. 0 is first, -1 is last.
Ruby
name = "Ruby"
puts name[0]       # R
puts name[-1]      # y
Get a slice starting at index 0 with length 5.
Ruby
text = "Hello World"
puts text[0, 5]    # Hello
Get a slice using a range from index 5 to 11.
Ruby
phrase = "Good morning"
puts phrase[5..11]  # morning
Sample Program
This program shows how to get the first and last characters and a slice of the first word from a sentence.
Ruby
sentence = "Programming is fun"
first_char = sentence[0]
last_char = sentence[-1]
word = sentence[0, 11]
puts "First character: #{first_char}"
puts "Last character: #{last_char}"
puts "First word: #{word}"
OutputSuccess
Important Notes
If you use an index outside the string length, Ruby returns nil.
Ranges include both start and end indexes.
You can use negative indexes to count from the string's end.
Summary
String indexing starts at 0 and can be negative to count from the end.
Use [index] for single characters, [start, length] or [range] for slices.
Slicing helps extract parts of strings easily.

Practice

(1/5)
1. In Ruby, what does str[0] return when str = "hello"?
easy
A. The first character of the string, 'h'
B. The entire string 'hello'
C. The last character of the string, 'o'
D. An error because indexing starts at 1

Solution

  1. Step 1: Understand Ruby string indexing

    Ruby strings are indexed starting at 0, so the first character is at index 0.
  2. Step 2: Apply indexing to the string 'hello'

    Accessing str[0] returns the first character 'h'.
  3. Final Answer:

    The first character of the string, 'h' -> Option A
  4. Quick Check:

    Index 0 = 'h' [OK]
Hint: Remember Ruby indexes start at zero for strings [OK]
Common Mistakes:
  • Thinking indexing starts at 1
  • Expecting the whole string instead of one character
  • Confusing last character with first
2. Which of the following is the correct way to get the substring 'ell' from str = "hello" using slicing?
easy
A. str[1,3]
B. str[0,3]
C. str[2..4]
D. str[1...3]

Solution

  1. Step 1: Understand slicing syntax

    In Ruby, str[start, length] extracts a substring starting at start with length characters.
  2. Step 2: Extract 'ell' from 'hello'

    'ell' starts at index 1 and has length 3, so str[1,3] returns 'ell'.
  3. Final Answer:

    str[1,3] -> Option A
  4. Quick Check:

    Substring from index 1, length 3 = 'ell' [OK]
Hint: Use [start, length] to slice substrings easily [OK]
Common Mistakes:
  • Using range with wrong end index
  • Confusing start and length parameters
  • Using negative indices incorrectly
3. What is the output of this Ruby code?
str = "programming"
puts str[-4, 3]
medium
A. ing
B. ram
C. amm
D. min

Solution

  1. Step 1: Understand negative indexing and slicing

    Negative index -4 means counting from the end: 'g'( -1), 'n'( -2), 'i'( -3), 'm'( -4). So index -4 points to 'm'.
  2. Step 2: Extract substring starting at 'm' with length 3

    From 'm' take 3 characters: 'm', 'i', 'n' forming 'min'.
  3. Final Answer:

    min -> Option D
  4. Quick Check:

    str[-4,3] = 'min' [OK]
Hint: Negative index counts from end; length slices forward [OK]
Common Mistakes:
  • Confusing negative index position
  • Using range instead of start,length
  • Off-by-one errors in slicing length
4. Identify the error in this Ruby code snippet:
str = "example"
puts str[2..5, 2]
medium
A. Returns nil because of invalid range
B. Returns 'am' as expected
C. SyntaxError due to wrong slicing syntax
D. Returns 'amp' substring

Solution

  1. Step 1: Analyze slicing syntax used

    The code uses str[2..5, 2] which mixes range and length parameters incorrectly. Ruby does not support this syntax.
  2. Step 2: Understand correct slicing methods

    Use either str[2..5] for range or str[2, 2] for start and length. Mixing both causes a syntax error.
  3. Final Answer:

    SyntaxError due to wrong slicing syntax -> Option C
  4. Quick Check:

    Invalid slice syntax = SyntaxError [OK]
Hint: Use either range or start,length, not both together [OK]
Common Mistakes:
  • Mixing range and length in one slice
  • Expecting multiple parameters in range slice
  • Ignoring Ruby's slice method rules
5. Given str = "abracadabra", which code extracts every second character starting from index 0 to index 8 (inclusive)?
hard
A. str[0..8][::2]
B. str[0..8].chars.select.with_index { |_, i| i.even? }.join
C. str[0, 8, 2]
D. str[0..8].chars.each_slice(2).map(&:first).join

Solution

  1. Step 1: Understand Ruby slicing limitations

    Ruby's slice method does not support step values like Python. So str[0, 8, 2] or str[0..8][::2] are invalid.
  2. Step 2: Use chars with index filtering to pick every second character

    str[0..8] gets substring 'abracadab'. Then chars.select.with_index { |_, i| i.even? } picks characters at even indices: a (0), r (2), c (4), d (6), b (8). Joining gives 'ar cdb' without spaces: 'arcdb'.
  3. Final Answer:

    str[0..8].chars.select.with_index { |_, i| i.even? }.join -> Option B
  4. Quick Check:

    Use chars and select.with_index for stepping [OK]
Hint: Ruby slice has no step; use chars with index filtering [OK]
Common Mistakes:
  • Trying Python-style slicing with step
  • Using invalid slice parameters
  • Not converting string to chars before filtering
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard