As per your explanation it seems that whenever any user provides search string as 23rd station, 23rd, 23 station, or 23rd ST then the filtered output should be "23 ST stop", Right?
So I am assuming that all your stops names will be like XX YY stop where XX is a numerical value and YY is shortform for some station like ST, VT, MT etc
If that is right, then one way you may achieve this is by performing multiple filters such that output of first filter is input to the next filter. But before that you need to figure out "what to filter on"?
So in this particular case, it seems "23" is a must present substring in the start of the query string, so you need to extract the numeric part from your query string (you can use Java regex) apply the result as first filter, so in this case it will be:
where stops like '23%'
then on output of this result you can apply next filter, and that next filter in this case could be the first two letter of the next word (if present) and applying its lower case for consistency, so in this case it would be 'st':
where LOWER(stops) like '%st%'
Now you can achieve this in the query part itself by applying both the filters in the same query (try using subqueries) or you can bring in the resultset of first filter and apply the remaining filter on that resultset using Java regex.