我正在尝试创建一个通用的删除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时。 ?我创建的这个方法是以我不理解的方式表现,即使我使用简单的逻辑。我知道已经有一些方法可以做我想做的事情,但是我希望这种方法可以工作。
答案 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);
这将删除t2
中t
的第一个字符。如果您需要任何进一步的帮助,请随时询问
用于替换此字符串的较长字符串:
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);
您可以选择使用