2014-01-07 4 views
0

Это метод, чтобы в основном избавиться от html-тегов в некотором тексте. метод remove задается следующим, и я тестировал его, и он работает.Извлечение переменной за пределами цикла в методе

public static String remove(String text, String str) { 

    int firstIndex = text.indexOf(str); 
    int beginofNewIndex = (firstIndex + 1) + str.length(); 

    if (firstIndex > 0) { 
     return text.substring(0, firstIndex) + text.substring(beginofNewIndex); 
    } else { 
     return text; 
    } 
} 

Однако, когда я возвращаю «текст», как указано ниже, он дает мне то же значение, что и при его вводе. Итак, допустим, что параметр метода removeAllTags является строковым текстом. Я ввожу «< b> Мальчик ходил </b>« но он возвращает то же самое. Кто-нибудь видит что-то неправильно?

public static String removeAllTags(String text) { 

    int textLength = text.length(); 

    while (textLength > 2) { 
     int firstIndex = text.indexOf("<"); 
     int secondIndex = text.indexOf(">"); 
     int thirdIndex = text.indexOf("</", secondIndex); 
     int fourthIndex = text.indexOf(">", secondIndex); 

     if (firstIndex >= 0 && secondIndex >= 0 && thirdIndex >= 0 && fourthIndex >= 0F) { 


      remove(text, text.substring(firstIndex, (secondIndex + 1))); 
      // remove(text, text.substring(thirdIndex, (fourthIndex + 1))); I will implement this into the code but I am testing with the first remove method first. 



     } 
     textLength = textLength - 1; 
    } 
    return text; 

} 
+0

Вам нужно сделать это таким образом? Возможно, посмотрите на этот вопрос: http://stackoverflow.com/questions/832620/stripping-html-tags-in-java – Catchwa

ответ

1

Проблема ваша строка и условие

"< b> The boy walked </b>" 

эта строка ваша имеет пространство между < пространство/b>, это дает ложный результат для

int thirdIndex = text.indexOf("</", secondIndex); 

, поэтому он не входит в цикл, и вам нужно назначить текст с возвращенным текстом

text = remove(text, text.substring(firstIndex, (secondIndex + 1))); 

Вы также можете использовать регулярные выражения, чтобы удалить весь HTML тег

str.replaceAll("\\<.*?>","") 
+0

Ну, я сделал промежуток между ними главным образом потому, что если я этого не сделаю, то stackoverflow автоматически преобразует его в жирные слова но thx – Freedom

+0

@LoyalKnight вместо этого вы используете регулярное выражение? –

+0

Что вы имеете в виду? – Freedom

2

Ключевая проблема эта линия:

remove(text, text.substring(firstIndex, (secondIndex + 1))); 

Это ничего не делает.

Java не передается по ссылке как C, а строки неизменяемы, поэтому любые изменения, внесенные в переданные строки, не отражаются вне метода.

Вместо этого, вы должны назначить результат обратно в переменную:

text = remove(text, text.substring(firstIndex, (secondIndex + 1))); 

Какие бы проблемы могут быть с вашим кодом, это один самый большой.

+0

Я пробовал его с помощью text = remove (text, text.substring (firstIndex, (secondIndex + 1))); но я получаю сообщение об ошибке при запуске: Исключение в потоке «main» java.lang.StringIndexOutOfBoundsException: Индекс строки за пределами допустимого диапазона: -13 \t at java.lang.String.substring (String.java:1911) \t at htmlprocessor.HTMLProcessor.removeAllTags (HTMLProcessor.java:83) \t at htmlprocessor.HTMLProcessor.main (HTMLProcessor.java:32) Java Результат: 1 Почему это? – Freedom

1
try this give your comment 
change these lines 
int beginofNewIndex = (firstIndex) + str.length(); 
this will point new char after > 
and 
if (firstIndex >= 0) 
this will accept when < is in first index like <br>hai. 
Смежные вопросы