如何从字符串中删除子字符串

时间:2015-04-06 06:21:20

标签: java

我不想从X中删除Y并且编译,但是当我在我的main方法中运行它时,我得到一个错误说出界限。我不确定是什么问题。任何帮助将不胜感激。

public static String filter(String X, String Y) {
    String i = X;
    if ((X != null) && (X.length() >0) && (Y != null) &&Y.length() >0 && (i !=null)){
        int z = X.indexOf(Y);
        i = X.substring(0, z) +X.substring(z + Y.length());
    }
    return i;
}

6 个答案:

答案 0 :(得分:1)

正如@singhakash已经指出的那样

int z = X.indexOf(Y); --> this is returning -1

所以

X.substring(0, z) 

成为

X.substring(0, -1)

导致OutOfBounds异常

P.S。 为什么你这么复杂!相反,您可以使用String#replaceString#replaceAll

String X="StackOverflow";
String Y="flow";
X=X.replaceAll(Y,"");
System.out.println(X);

输出

StackOver

Demo1 - 如果x中不存在y,则会使索引超出范围

Demo2 - 如果x中存在y,您将获得正确的输出

答案 1 :(得分:1)

使用replaceAll方法

public static String filter(String X, String Y) {
    return X.replaceAll(Y,"");
}

答案 2 :(得分:1)

我想这对你有用:

if((x !=null && y !=null) && x.contains(y)) {
   System.out.println(x.replaceAll(y, ""));
}

答案 3 :(得分:0)

由于此Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1

,当字符串X的长度小于字符串Y时,会发生X.substring(z + Y.length())

额外检查“X.length()> Y.length()”,它应该可以正常工作。

答案 4 :(得分:0)

如果您想删除X中所有出现的Y,请使用以下代码。

public static String filter(String X, String Y) {
if ((X != null) && (X.length() >0) && (Y != null) &&Y.length() >0) {
while(X.contains(Y)){
int z = X.indexOf(Y);
X = X.substring(0, z) +X.substring(z + Y.length());
}}
return X;

如果X不包含Y那么 int z = X.indexOf(Y); - >这是返回-1 X.substring(0, z)X.substring(0, -1) - >导致 OutOfBounds异常

最好使用X=X.replaceAll(Y,"");

答案 5 :(得分:-1)

您可以使用:

String subString = testString.subString(firstIndex, secondIndex);

你可以通过这个获得索引:

int index = testString.indexOf(String);