How to Find Occurrences of a Character in a String Using Ruby

Updated on July 22, 2020
melbel profile image

Melanie has a BS in physical science and is in grad school for analytics and modeling. Her research is in computational chemistry.

Learn three ways to find all occurrences of a character in a string of Ruby code.
Learn three ways to find all occurrences of a character in a string of Ruby code.

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

  1. Ruby's built-in count method: allows you to count the number of times a character occurs in a string
  2. The built-in scan method: allows you to see the characters themselves
  3. 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!

Sample String

"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

Comments

    0 of 8192 characters used
    Post Comment
    • Peggy W profile image

      Peggy Woods 

      6 weeks ago from Houston, Texas

      There must be a good reason for wanting to know such things when coding.

    working

    This website uses cookies

    As a user in the EEA, your approval is needed on a few things. To provide a better website experience, owlcation.com uses cookies (and other similar technologies) and may collect, process, and share personal data. Please choose which areas of our service you consent to our doing so.

    For more information on managing or withdrawing consents and how we handle data, visit our Privacy Policy at: https://maven.io/company/pages/privacy

    Show Details
    Necessary
    HubPages Device IDThis is used to identify particular browsers or devices when the access the service, and is used for security reasons.
    LoginThis is necessary to sign in to the HubPages Service.
    Google RecaptchaThis is used to prevent bots and spam. (Privacy Policy)
    AkismetThis is used to detect comment spam. (Privacy Policy)
    HubPages Google AnalyticsThis is used to provide data on traffic to our website, all personally identifyable data is anonymized. (Privacy Policy)
    HubPages Traffic PixelThis is used to collect data on traffic to articles and other pages on our site. Unless you are signed in to a HubPages account, all personally identifiable information is anonymized.
    Amazon Web ServicesThis is a cloud services platform that we used to host our service. (Privacy Policy)
    CloudflareThis is a cloud CDN service that we use to efficiently deliver files required for our service to operate such as javascript, cascading style sheets, images, and videos. (Privacy Policy)
    Google Hosted LibrariesJavascript software libraries such as jQuery are loaded at endpoints on the googleapis.com or gstatic.com domains, for performance and efficiency reasons. (Privacy Policy)
    Features
    Google Custom SearchThis is feature allows you to search the site. (Privacy Policy)
    Google MapsSome articles have Google Maps embedded in them. (Privacy Policy)
    Google ChartsThis is used to display charts and graphs on articles and the author center. (Privacy Policy)
    Google AdSense Host APIThis service allows you to sign up for or associate a Google AdSense account with HubPages, so that you can earn money from ads on your articles. No data is shared unless you engage with this feature. (Privacy Policy)
    Google YouTubeSome articles have YouTube videos embedded in them. (Privacy Policy)
    VimeoSome articles have Vimeo videos embedded in them. (Privacy Policy)
    PaypalThis is used for a registered author who enrolls in the HubPages Earnings program and requests to be paid via PayPal. No data is shared with Paypal unless you engage with this feature. (Privacy Policy)
    Facebook LoginYou can use this to streamline signing up for, or signing in to your Hubpages account. No data is shared with Facebook unless you engage with this feature. (Privacy Policy)
    MavenThis supports the Maven widget and search functionality. (Privacy Policy)
    Marketing
    Google AdSenseThis is an ad network. (Privacy Policy)
    Google DoubleClickGoogle provides ad serving technology and runs an ad network. (Privacy Policy)
    Index ExchangeThis is an ad network. (Privacy Policy)
    SovrnThis is an ad network. (Privacy Policy)
    Facebook AdsThis is an ad network. (Privacy Policy)
    Amazon Unified Ad MarketplaceThis is an ad network. (Privacy Policy)
    AppNexusThis is an ad network. (Privacy Policy)
    OpenxThis is an ad network. (Privacy Policy)
    Rubicon ProjectThis is an ad network. (Privacy Policy)
    TripleLiftThis is an ad network. (Privacy Policy)
    Say MediaWe partner with Say Media to deliver ad campaigns on our sites. (Privacy Policy)
    Remarketing PixelsWe may use remarketing pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to advertise the HubPages Service to people that have visited our sites.
    Conversion Tracking PixelsWe may use conversion tracking pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to identify when an advertisement has successfully resulted in the desired action, such as signing up for the HubPages Service or publishing an article on the HubPages Service.
    Statistics
    Author Google AnalyticsThis is used to provide traffic data and reports to the authors of articles on the HubPages Service. (Privacy Policy)
    ComscoreComScore is a media measurement and analytics company providing marketing data and analytics to enterprises, media and advertising agencies, and publishers. Non-consent will result in ComScore only processing obfuscated personal data. (Privacy Policy)
    Amazon Tracking PixelSome articles display amazon products as part of the Amazon Affiliate program, this pixel provides traffic statistics for those products (Privacy Policy)
    ClickscoThis is a data management platform studying reader behavior (Privacy Policy)