Paddayuman Teddy
Paddayuman Teddy

Reputation: 37

How do you replace the last occurance of a , with the word "and"?

How do you replace the last occurance of a , with the word and? Can you please give me an idea?

i have 3 checkboxes, 1 rich textbox to display the output, 1 button

(Aparri) or (Camalanuigan) or (Lallo)

Cagayan(Aparri, Camalanuigan) or Cagayan(Aparri,Camalanuigan,Lallo)

I would like the output to be like this: #Cagayan(Aparri and Camalanuigan) or #Cagayan(Aparri,Camalanuigan And Lallo)

this is my code:

 Dim rws As String

        If Aparri.Checked = True Then
            close_parenthesis.Checked = True
            If rws = "" Then
                rws = "(" + Aparri.Text
            End If
        End If

        If Aparri.Checked = False Then
            rws = ""
        End If


        If Camalanuigan.Checked = True Then
            close_parenthesis.Checked = True
            If rws = "" Then
                rws = "(" + Camalanuigan.Text
            Else
                rws = rws & ", " & Camalanuigan.Text
            End If
        End If


        If Lallo.Checked = True Then
            close_parenthesis.Checked = True
            If rws = "" Then
                rws = "(" + Lallo.Text
            Else
                rws = rws & ", " & Lallo.Text
            End If
        End If

 If close_parenthesis.Checked = True Then
            If rws = "" Then

            Else
                rws = rws + close_parenthesis.Text
            End If
        End If
    Display.Text = rws.ToString

Output: (Aparri,Camalanuigan,Lallo)

i want the out like this (Aparri,Camalanuigan and Lallo)

Sample Image

Upvotes: 2

Views: 858

Answers (3)

Fabio
Fabio

Reputation: 32445

You always can do it by yourself with single loop and knowledge about last index

' Create array of selected strings
Dim selectedTexts = 
    New List(Of CheckBox) From { Aparri, Camalanuigan, Lallo }.
                          Where(Function(checkbox) checkbox.Checked).
                          Select(Function(checkbox) checkbox.Text).
                          ToArray()

' Separate selected strings by delimeters
Dim lastIndex = selectedTexts.GetUpperBound(0)
Dim builder = New StringBuilder()
For i As Integer = 0 To lastIndex
    If i > 0 Then
        Dim delimeter = If(lastIndex > 0 AndAlso lastIndex = i, " and ", ", ")
        builder.Append(delimeter)
    End If

    builder.Append(test(i))
Next

' Wrap with parenthesis if result not empty
If builder.Length > 0 Then
    builder.Insert(0, "(")
    Dim close = If(close_parenthesis.Checked, close_parenthesis.Text, "")
    builder.Append(close)
End If

' Print result
Display.Text = builder.ToString()

Upvotes: 0

Subaz
Subaz

Reputation: 917

Here, I haven't even seen your code but I get what you want to do by looking at the picture. It can be done in shorter version but I have explained what's going on in each and every line so it's lengthy.

I have written this code:

 'let's say the string is "Aparri, Camalanuigan, Lallo" . that's what your code does, right?
dim Strng as string = "Aparri, Camalanuigan, Lallo"

    'now find the position of last appearing ","
    Dim comaposition As Integer
    comaposition = Strng.LastIndexOf(",") 'it is zero  based

    'if not found, it will return -1 and u can exit, no need to do the work
    if commaposition = "-1" then

         exit sub
    end if

    'remove the comma
    Dim String_After_Removing_Comma As String
    String_After_Removing_Comma = Strng.Remove(comaposition, 1)

    'add "and" in the same position where comma was found
    Dim final_string As String
    final_string = String_After_Removing_Comma.Insert(comaposition, " and")

    'show it on the textbox
    DisplayTxt.Text = final_string

You can do this thing after finding your final string (rws in your code). Hope this helps

Upvotes: 3

Mehang Rai
Mehang Rai

Reputation: 92

You can use the following function to replace last occurrence.

Public Function ReplaceLastOccurrence(ByVal source As String, ByVal searchText As String, ByVal replace As String) As String
    Dim position = source.LastIndexOf(searchText)
    If (position = -1) Then Return source
    Dim result = source.Remove(position, searchText.Length).Insert(position, replace)
    Return result
End Function     

and you use display text as Display.Text = ReplaceLastOccurence(rws, ",", "and") in your last line of code

Upvotes: 4

Related Questions