2017-01-31 2 views
1

Я пытаюсь создать общий метод удаления String, который принимает два ввода String - parentString и cleanable, и возвращает parentString после полного удаления очищаемых из всех его вхождений в parentString, который работает очень хорошо, за исключением случаев, когда я говорю, чтобы удалить кавычки.Пользовательский метод Java для удаления подстроки - странное поведение при удалении кавычек

. Вот что я сделал:

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; 

} 

Это прекрасно работает, когда вход в виде [ «Джоан Роулинг»], за исключением, и я применить метод, как автор = Удалить (автор, «\» "); Это дает следующие значения:

child1 = "" ; 
child2= K. Rowling; 

Я также заметил, что подстрока (х, у) метод возвращает «», когда х становится равным у Этот метод, который я создал ведет себя таким образом, я не понимаю.? , даже когда я использую простую логику. Я знаю, что есть уже доступные методы, которые будут делать то, что я пытаюсь сделать, но я хотел бы, чтобы этот метод работал.

+0

Вы должны быть более четко один, что вы делаете, и что он должен делать. Посмотрите, как создать [mcve] – AxelH

+0

PS: _I нужно разбирать данные JSON в моей программе_, не делайте этого самостоятельно, используйте более сложный API, который вы можете себе представить. – AxelH

+0

Можете ли вы добавить пример параметров функции и ожидаемых результатов ? – Emax

ответ

0

Если вы хотите сделать полный процесс - лучше бы реализовать поиск подстроки и метода substring. Метод возвращает пустую строку, когда x равно y, потому что x - это начальная позиция и y - это конечная позиция (эксклюзивная), поэтому вы спрашиваете: «дайте мне строку от 5 до 5», конечно, она вернется вы пустая строка.

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 
+0

вход должен быть 'String parent =" [\ "J.K. Rowling \ "]"; 'и только экранированные' '' должны быть удалены. – XtremeBaumer

+0

@XtremeBaumer check answer i replace 'child2 = parentString.substring (i + cleanable.length(), parentString.length() - 1); 'this один для 'child2 = parentString.substring (i + cleanable.length(), parentString.length() - 2);' –

0

Есть две точки:

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

из-за этого, ваш child1 станет "" в качестве первого " будет в 1-я позиция.

затем второй пункт:

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 (я = 1) + 1, (cleanable.length()) = 2 символа из него. и « от последнего.

следовательно выход будет K.Rowling

0

поэтому я создал простой способ для вас, который позволяет одновременно заменять 1 символ. если вы хотите больше, чем один символ должен быть удален, вы будете нуждаться в какой-либо другой логики

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

его ваш выбор, что вы будете использовать

 Смежные вопросы

  • Нет связанных вопросов^_^