Node split string by last space - node.js

var str="72 tocirah abba tesh sneab";
I currently have this string and want a new string that is called "72 tocirah abba tesh". What is the best way to do this in node/Javascript?

Another one-liner:
"72 tocirah abba tesh sneab".split(" ").slice(0, -1).join(" ")
Basically, you split the string using the space separator, slice the resulting array removing the last item, and join the array using the space separator.

You can use replace, like:
"72 tocirah abba tesh sneab".replace(/\s\w+$/, '')
(This replaces the last space and word with an empty string)

I would solve it like that:
let str = "72 tocirah abba tesh sneab"
Split by " ":
let list = str.split(" ") // [72,tocirah,abba,tesh,sneab]
Remove the last element using pop():
list.pop() // [72,tocirah,abba,tesh]
Then join it back together:
str = list.join(" ") // 72 tocirah abba tesh

Following is one of the ways to handle this.
use lastIndexOf function
const lastSpacePosition = str.lastIndexOf(" ");
// in case there is no space in the statement. take the whole string as result.
if(lastSpacePosition < 0) {
lastSpacePosition = str.length;
}
str.substr(0, lastSpacePosition);
There are other ways to handle this using regEx, split->join as well

Related

How to replace a string with star except first character in kotlin

I want to know how can I replace a given string with stars except first character of string in kotlin
For e.g i have string "Rizwan" , I want it to be R*****
You can do it with padEnd():
val name = "Rizwan"
val newName = name[0].toString().padEnd(name.length, '*')
Result:
"R*****"
Try replace center of String like Phone number. with ★:
phone.replaceRange(2 , phone.length-3 , "★".repeat(phone.length-5))
pay attention to 2 + 3 = 5 :D
Result:
"09★★★★★229"
Try replacing (?<=.). with *:
val input = "Rizwan"
val output = input.replace(Regex("(?<=.)."), "*")
println(output)
This prints:
R*****
The lookbehind (?<=.) in the regex pattern ensures that we only replace a character if at least one character precedes it. This spares the first character from being replaced.
I am not an expert in Kotlin so this may not be the best way to do it but it will work for sure.
var s = "Rizwan"
var l = s.length
val first = s[0]
s=""
while(l>1) {
s=s+"*"
l--
}
s=first+s
print(s)
Basic Algorithm..... using no library or functions
val name = "Rizwan"
val newName = name[0].toString().padEnd(name.length, '*')
Result:
"R*****"

Skipping spaces in Groovy

I'm trying to write a conditional statement where I can skip a specific space then start reading all the characters after it.
I was thinking to use substring but that wouldn't help because substring will only work if I know the exact number of characters I want to skip but in this case, I want to skip a specific space to read characters afterward.
For example:
String text = "ABC DEF W YZ" //number of characters before the spaces are unknown
String test = "A"
if ( test == "A") {
return text (/*escape the first two space and return anything after that*/)
}
You can split your string on " " with tokenize, remove the first N elements from the returned array (where N is the number of spaces you want to ignore) and join what's left with " ".
Supposing your N is 2:
String text = "ABC DEF W YZ" //number of characters before the spaces are unknown
String test = "A"
if ( test == "A") {
return text.tokenize(" ").drop(2).join(" ")
}

Is there a way to substring, which is between two words in the string in Python?

My question is more or less similar to:
Is there a way to substring a string in Python?
but it's more specifically oriented.
How can I get a par of a string which is located between two known words in the initial string.
Example:
mySrting = "this is the initial string"
Substring = "initial"
knowing that "the" and "string" are the two known words in the string that can be used to get the substring.
Thank you!
You can start with simple string manipulation here. str.index is your best friend there, as it will tell you the position of a substring within a string; and you can also start searching somewhere later in the string:
>>> myString = "this is the initial string"
>>> myString.index('the')
8
>>> myString.index('string', 8)
20
Looking at the slice [8:20], we already get close to what we want:
>>> myString[8:20]
'the initial '
Of course, since we found the beginning position of 'the', we need to account for its length. And finally, we might want to strip whitespace:
>>> myString[8 + 3:20]
' initial '
>>> myString[8 + 3:20].strip()
'initial'
Combined, you would do this:
startIndex = myString.index('the')
substring = myString[startIndex + 3 : myString.index('string', startIndex)].strip()
If you want to look for matches multiple times, then you just need to repeat doing this while looking only at the rest of the string. Since str.index will only ever find the first match, you can use this to scan the string very efficiently:
searchString = 'this is the initial string but I added the relevant string pair a few more times into the search string.'
startWord = 'the'
endWord = 'string'
results = []
index = 0
while True:
try:
startIndex = searchString.index(startWord, index)
endIndex = searchString.index(endWord, startIndex)
results.append(searchString[startIndex + len(startWord):endIndex].strip())
# move the index to the end
index = endIndex + len(endWord)
except ValueError:
# str.index raises a ValueError if there is no match; in that
# case we know that we’re done looking at the string, so we can
# break out of the loop
break
print(results)
# ['initial', 'relevant', 'search']
You can also try something like this:
mystring = "this is the initial string"
mystring = mystring.strip().split(" ")
for i in range(1,len(mystring)-1):
if(mystring[i-1] == "the" and mystring[i+1] == "string"):
print(mystring[i])
I suggest using a combination of list, split and join methods.
This should help if you are looking for more than 1 word in the substring.
Turn the string into array:
words = list(string.split())
Get the index of your opening and closing markers then return the substring:
open = words.index('the')
close = words.index('string')
substring = ''.join(words[open+1:close])
You may want to improve a bit with the checking for the validity before proceeding.
If your problem gets more complex, i.e multiple occurrences of the pair values, I suggest using regular expression.
import re
substring = ''.join(re.findall(r'the (.+?) string', string))
The re should store substrings separately if you view them in list.
I am using the spaces between the description to rule out the spaces between words, you can modify to your needs as well.

Remove words of a string started by uppercase characters in Scala

I want to write an algorithm that removes every word started by an uppercase character in a string.
For example:
Original string: "Today is Friday the 29Th."
Desired result: "is the 29Th."
I wrote this algorithm, but it is not complete:
def removeUpperCaseChars(str: String) = {
for (i <- 0 to str.length - 1) {
if (str.charAt(i).isUpper) {
var j = i
var cont = i
while (str.charAt(j) != " ") {
cont += 1
}
val subStr = str.substring(0, i) + str.substring(cont, str.length - 1)
println(subStr)
}
}
}
It (supposedly) removes every word with uppercase characters instead of removing only the words that start with uppercase characters. And worse than that, Scala doesn't give any result.
Can anyone help me with this problem?
With some assumptions, like words are always split with a space you can implement it like this:
scala> "Today is Friday the 29Th.".split("\\s+").filterNot(_.head.isUpper).mkString(" ")
res2: String = is the 29Th.
We don't really want to write algorithms in the way you did in scala. This is reather a way you would do this in C.
How about string.replaceAll("""\b[A-Z]\w+""", "")?

Replace substring that lies between two positions

I have a string S in Matlab. How can I replace a substring in S with some pattern P. I only know the first and the last index of substring in S. What is the approach?
How about that?
str = 'My dog is called Jim'; %// original string
a = 4; %// starting index
b = 6; %// last index
replace = 'hamster'; %// new pattern
newstr = [str(1:a-1) replace str(b+1:end)]
returns:
newstr = My hamster is called Jim
In case the pattern you want to substitute has the same number of characters as the new one, you can use simple indexing:
str(a:b) = 'cat'
returns:
str = My cat is called Jim

Resources