Find Occurrences of a Character in a String Using Ruby
Finding occurrences of a character in a string in the Ruby programming language can be achieved in practically innumerable ways. You may want to choose an approach based on what you plan to do with the occurrences of these characters. In this tutorial, I will highlight ways to find all occurrences of a character in a string, not just the first one.
Here are three ways I use to find such occurrences:
- Ruby's built-in count method which allows me to count the number of time a character occurs in a string.
- The built-in scan method which allows me to see the characters themselves.
- The index method which allows me to retrieve the location, within a string, where the character occurs.
All three methods can be used to clean data for pre-processing which was the reasoning behind this guide. Whichever method you choose to use would highly depend on your string and your desired outcome. Whatever your usage it, my hope is that I've got you covered with a description of each method and some source code. So let's get started!
"This is a Ruby tutorial"
How to Find Characters in Strings
Count Method Approach
This returns the number of times the character occurs. In the example shown below, I first demonstrate how to find the number of times the letter "i" occurs in the string, "This is a Ruby tutorial." The answer should be three, which you can quickly see by counting yourself. The code indeed returns the integer 3.
Keep in mind that this is case sensitive. In the second example, we are explicitly telling Ruby that we want to count the number of times the letter "r" occurs in the same string. Intuitively, you would count two.
The letter "r" appears in the word "Ruby" and in the word "tutorial." However, the code actually returns the integer 1. Why is this? This is because we asked for "r" and not "R". In order to retrieve instances of both "r" and "R", Ruby must be told explicitly that both cases are required (as shown in line 10 of the code snippet below.)
string = 'This is a Ruby tutorial.' string.count('i') # This returns the integer 3 # case sensitive example string.count('r') # This returns the integer 1 string.count('r', + 'R') # This returns the integer 2
Scan Method Approach
The second method, scan, differs in that instead of returning a count, it returns an array of the characters themselves. As in the above method, keep in mind that scan is case sensitive.
On line four of the code below, the string 'i' is used to search for instances of the letter "i". Regex can also be used in place of a string. For example, line four could be replaced with string.scan(/i/).
string = "This is a Ruby tutorial." # Here we will return an array containing each instance of i string.scan('i') # This code returns ["i", "i", "i"]
Index Method Approach
Another method of finding the occurrence of a character in a string is by using Ruby's index method. This allows you to find the location of the first occurrence. This can be helpful in cases where you want to do a replacement. As with scan and count, index is case sensitive.
This method returns the position in the string. In the string, "This is a ruby tutorial," if we wanted to find the index for the letter "i", the code would return 2 as shown in the code below.
string = "This is a Ruby tutorial." # This returns the index where the 1st instance of i occurs string.index('i') # This code returns 2
We've covered Ruby's built-in count method, scan method, and index method. When selecting a method, you'll want to keep in mind what your end goal is with your code.
If you just want the number of times a character occurs, you'll want to use the count method. If you want to return the characters you're searching for, use the scan method. Finally, if you're wanting to get the location of the found character (if you're looking to do a replacement, for example), the index method is a perfect way to handle this.
For more information, please see RubyDocs or leave a comment below with any questions on how to implement this code. Let me know which method you're going to use in your code. I'd love to hear your feedback.
© 2020 Melanie