繁体   English   中英

用于删除子字符串的自定义Java方法 - 删除引号时的奇怪行为

[英]Custom Java method to remove substring - weird behavior on removing quotes

我正在尝试创建一个通用的删除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;

}

它的工作正常,除非输入的格式为[“JK Rowling”]并且我将该方法应用为author = remove(author,“\\”“);它给出以下值:

child1 = "" ;
child2= K. Rowling;

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

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

你可以试试这个。

 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

有两点:

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

因此,你的孩子1将成为“”,因为第一个将在第一位置。

然后第二点:

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

i = 1

cleanable.length()= 1

所以它将是JK罗琳“在第一次迭代和下一次迭代中,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

所以我为你创建了一个简单的方法,它只允许一次替换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);

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

更长的字符串替换此工作:

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);

它是您的选择

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM