用于删除子字符串的自定义Java方法 - 删除引号

时间:2017-01-31 11:39:27

标签: java string methods

我正在尝试创建一个通用的删除String方法,该方法接受两个String输入 - parentString和cleanable,并在完全删除parentString中所有出现的可清除之后返回parentString,除非我告诉它删除引号。

。这就是我的所作所为:

public String remove(String parentString, String cleanable) {
    int i = parentString.indexOf(cleanable);
    Log.d(LOG_TAG, "print index " + i);
    String child1, child2;


    while (parentString.indexOf(cleanable) != -1) {
        if (parentString.indexOf(cleanable) == 0) {
            child1 = "";
        } else {
            child1 = parentString.substring(0, (i - 1));
        }
        Log.d(LOG_TAG, "print child1 " + child1);
        child2 = parentString.substring(i + cleanable.length(), parentString.length() - 1);
        Log.d(LOG_TAG, "print child2 " + child2);
        parentString = child1 + child2;
        Log.d(LOG_TAG, "print parent " + parentString);
    }

    return parentString;

}

除了输入形式为[" J.K。罗琳"]我将该方法应用为author = remove(作者," \"");它给出了以下值:

child1 = "" ;
child2= K. Rowling;

我还注意到子串(x,y)方法正在返回""当x变得等于y时。 ?我创建的这个方法是以我不理解的方式表现,即使我使用简单的逻辑。我知道已经有一些方法可以做我想做的事情,但是我希望这种方法可以工作。

4 个答案:

答案 0 :(得分:0)

如果您想完成整个过程 - 如果您实现搜索子字符串和方法substring,那就更好了。 当x等于y时,该方法会返回一个空字符串,因为x - 它是一个起始位置和y - 它的结束位置(独占),所以你问:"给我一个5到5"的字符串,当然它会给你一个空字符串。

答案 1 :(得分:0)

你可以试试这个。

 public class HelloWorld
    {
      public String remove(String parentString, String cleanable) {
        int i = parentString.indexOf(cleanable);
        String child1, child2;
        while (parentString.indexOf(cleanable) != -1) {
            if (parentString.indexOf(cleanable) == 0) {
                child1 = "";
            } else {
                child1 = parentString.substring(0, (i - 1));
            }
            child2 = parentString.substring(i + cleanable.length(), parentString.length() - 2);
            parentString = child1 + child2;
        }
        return parentString;
    }
      public static void main(String[] args)
      {
       System.out.print(new HelloWorld().remove("[\"J.K. Rowling\"]","\""));
      }
    }

<强>输出

J.K. Rowling

答案 2 :(得分:0)

有两点:

child1 = parentString.substring(0, (i - 1));

因此,您的child1将成为“”,因为第一个将位于第一位置。

然后第二点:

    child2 = parentString.substring(i + cleanable.length(), parentString.length() - 1);

i = 1

cleanable.length()= 1

所以它将是 J.K。在第一次迭代和下一次迭代中使用“” 由于

,child1仍然是“”
child1 = parentString.substring(0, (i - 1));

但这一次

child2 = parentString.substring(i + cleanable.length(), parentString.length() - 1);

它将删除1(i = 1)+ 1(cleanable.length())= 2个字符。和从上次开始。

因此输出将是K.Rowling

答案 3 :(得分:0)

所以我为你创建了一个简单的方法,它一次只允许更换1个字符。如果你想要删除多个char,你需要一些其他的逻辑

String t = "[\"J.K. Rowling\"]";
String t2 = "\"";
for (int i = 0; i < t.length(); i++) {
    if (t.charAt(i) == t2.charAt(0)) {
        t = t.substring(0, i) + t.substring(i + 1);
    }
}
System.out.println(t);

这将删除t2t的第一个字符。如果您需要任何进一步的帮助,请随时询问

用于替换此字符串的较长字符串:

String t = "[\"J.K. Rowling\"]";
String t2 = "[\"J.K";
for(int i=0;i<t.length()-t2.length();i++){
    if(t.substring(i, i+t2.length()).equals(t2)){
        t=t.substring(0,i)+t.substring(i+=t2.length());
    }
}
System.out.println(t);

您可以选择使用