2013-12-10 4 views
1

Я пытаюсь заменить все вхождения подстроки из строки.Удаление элементов из строки

Я хочу заменить "\t\t\t" с "<3tabs>"
Я хочу заменить "\t\t\t\t\t\t" с "<6tabs>"
Я хочу заменить "\t\t\t\t" с "< >"

Я использую

s = s.replace("\t\t\t\t", "< >"); 
s = s.replace("\t\t\t", "<3tabs>"); 
s = s.replace("\t\t\t\t\t\t", "<6tabs>"); 

Но не использовать, он не замените что-нибудь, затем я попытался использовать

s = s.replaceAll("\t\t\t\t", "< >"); 
s = s.replaceAll("\t\t\t", "<3tabs>"); 
s = s.replaceAll("\t\t\t\t\t\t", "<6tabs>"); 

Опять же, бесполезно, ничего не заменяет. после проверки этих двух методов я попробовал StringBuilder

Я смог заменить элементы через StringBuilder, мой вопрос: почему я не могу заменить элементы непосредственно через String из двух вышеуказанных команд? Есть ли какой-либо метод, из которого я могу напрямую заменить элементы из String?

+0

почему не '\ т \ т \ т \ т \ т \ T', чтобы <3tabs><3tabs> –

ответ

1

6tabs никогда не найдет матч в качестве чек, прежде чем он уже заменит их двумя 3tabs.

Необходимо сначала начать с наибольшего совпадения.

Строки неизменяемы, поэтому вы не можете напрямую их изменять, s.replace() возвращает новую строку с изменениями, присутствующими в ней. Затем вы назначаете это обратно, чтобы он работал нормально.

Поместите вещи в правильном порядке и пройдите через нее с помощью отладчика, чтобы увидеть, что происходит.

+0

я использую его в правильное порядок в моем коде, заменив большие вкладки, а затем меньше, а затем самый маленький, я попытался отладить его, но значение строки s останется таким же –

0

Посмотрите на this

Переход через текст, разделить его на полукокса [] массив, а затем использовать для цикла, чтобы пройти через отдельные символы. Не распечатывайте их прямо, но печатайте их с помощью тега% x (или% d, если вам нравятся десятичные числа).

char[] characters = myString.tocharArray(); 
for (char c : characters) 
{ 
    System.out.printf("%x%n", c); 
} 

Получить таблицу ASCII и посмотреть все номера для персонажей, и посмотреть, есть ли какие-либо \ п или \ е или \ г. Сделайте это до или после.

В разных операционных системах используются разные символы окончания строки; это первая ссылка, которую я нашел у Google с помощью «терминатора строк Linux». Он говорит, что Windows использует \ r \ f и Linux \ f. Вы должны найти это из своего примера. Очевидно, что если вы разделите \ n и оставьте \ r, вы все равно разделите текст на отдельные строки.

Возможно, вы можете быть более успешным, если вы пишете регулярное выражение (см. Эту часть учебника по Java и т. Д.), Которое включает в себя пробельные и линейные терминаторы, и используйте его как разделитель с методом String.split(), затем распечатайте индивидуальные жетоны в порядке.

2

попробовать в этом порядке

String s = "This\t\t\t\t\t\tis\t\t\texample\t\t\t\t"; 
s = s.replace("\t\t\t\t\t\t", "<6tabs>"); 
s = s.replace("\t\t\t\t", "< >"); 
s = s.replace("\t\t\t", "<3tabs>"); 
System.out.print(s); 

выход:

This<6tabs>is<3tabs>example< > 
Смежные вопросы