How to Find Occurrences of a Character in a String Using Ruby
Finding all occurrences of a particular character in a string in the Ruby programming language can be achieved in practically innumerable ways. You may want to choose your 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).
3 Ways to Find All Instances of a Character in a String of Ruby Code
- Ruby's built-in count method: allows you to count the number of times a character occurs in a string
- The built-in scan method: allows you to see the characters themselves
- The index method: allows you to retrieve the first location within a string where a character occurs
All three methods can be used to clean data for pre-processing, which is the application I had in mind when making this guide. The method you choose to use should depend on your string and your desired outcome. Whatever your goal, my hope is that I've got you covered with a description of each method and some source code. Let's get started!
"This is a Ruby tutorial"
How to Find Characters in Strings
1. Count Method Approach
This returns the number of times a 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
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 this 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"]
3. 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
When to Use Each Method
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.
This article is accurate and true to the best of the author’s knowledge. Content is for informational or entertainment purposes only and does not substitute for personal counsel or professional advice in business, financial, legal, or technical matters.
© 2020 Melanie