Java 从给定的另一个字符串开始替换子字符串

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

我有两个字符串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.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()));
        }