Java 从给定的另一个字符串开始替换子字符串
我有两个字符串s1和s2。如果s1以s2开头,我想从s1中删除s2。s2可以是可变长度的Java 从给定的另一个字符串开始替换子字符串,java,Java,我有两个字符串s1和s2。如果s1以s2开头,我想从s1中删除s2。s2可以是可变长度的 For eg. s1 = 123456789 s2 = 123 output = 456789 For eg. s1 = 123456789 s2 = 12345 output = 6789 现在我从s1中计算s2的索引,然后提取子字符串 我很好奇有没有更好的方法?正则表达式?使用正则表达式解决简单的子字符串问题毫无意义。细分: //precondition: s2.length() <= s1.l
For eg. s1 = 123456789 s2 = 123 output = 456789
For eg. s1 = 123456789 s2 = 12345 output = 6789
现在我从s1中计算s2的索引,然后提取子字符串
我很好奇有没有更好的方法?正则表达式?使用正则表达式解决简单的子字符串问题毫无意义。细分:
//precondition: s2.length() <= s1.length()
String piece = s1.substring(0, s2.length());
String remainder = s1.substring(s2.length());
return piece.equals(s2) ? remainder : s1;
按照您描述问题的方式,您希望从s1中删除s2。事实上,您希望用一个空字符串替换s1中出现的所有s2,这是使用
s1.replace(s2,"");
或
如果您只想删除s2的第一次出现
if(s1.startsWith(s2) && s1.length() > s2.length()) {
System.out.println(s1.substring(s2.length(), s1.length()));
}
可能是这样的?
字符串输出=s1.startsWith(s2)?s1.子字符串(s2.length()):s1
.pseudo-ish-code:if(s1.substr(0,s2.length).equals(s2)){s1=s1.substr(s2.length))`我真的不想让人们痴迷于将正则表达式用于真正不需要它们的东西。单次调用substring()和单次调用equals()有什么不对?因为regex本质上是解决大多数问题的万能解决方案,但我并不同意将其用于所有问题。因此,对于许多人来说,它是一种可行的解决方案。@nhouser9我不知道你是否听过这样一句话:“当你只有一把锤子时,一切看起来都像钉子。”。换句话说,如果它是你所知道的唯一工具,那么它就是你尝试使用的唯一工具。第一种方法并不总是有效,例如,如果s1
比s2
短。第二种方法是正确的、更容易的和更有效的。它最初是一个先决条件,但我不再使用一行,而是为t填写更多的答案他在两个步骤之间插入。这两个步骤都不正确。第一个步骤删除所有出现的s2
;第二个步骤删除第一个出现的,但不一定在字符串的开头。
s1.replaceFirst(s2,"");
if(s1.startsWith(s2) && s1.length() > s2.length()) {
System.out.println(s1.substring(s2.length(), s1.length()));
}