2013-02-17 2 views
1

Я узнал, что string.trim() удаляет ведущие и конечные пробелы. Но в моем случае он не работает, я пытаюсь использовать код ниже, но вывод с ведущим и конечным пространством. Но мое ожидание - текст без начального и конечного пространства. Вот мой код.Функция обрезки строки не работает

String s = " Hello Rais "; 
s += " Welcome to my World "; 
s.trim(); 
System.out.println(s); 

Пожалуйста, помогите мне

+1

[The API в этом случае очень полезно.] (http://docs.oracle.com/javase/7/docs/api/java/lang/String.html # trim()) Вы * do * должны переназначить его в нужную вам строку - Строки неизменяемы. – Makoto

+3

@Real - повторите после меня. «Строки Java неизменяемы». :-) –

+0

@StephenC Мой код работает, я делал ошибку silli. Я должен проверить возврат функции триммера к переменной. Я не понимаю, что вы пытаетесь сказать в комментарии выше. –

ответ

9

Вы должны повторно присвоить результат trim назад s:

s = s.trim(); 

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


Хотя это не по теме, но (как я сказал, что almost), это стоит знать, что исключение из этого правила при создании substring одинаковой длины, или в любое время метод возвращает строку с то же значение, которое будет оптимизировано и не создаст новую строку, а просто вернет this.

String s = "Rohit"; 
String s2 = s.substring(0, s.length()); 

System.out.println(s == s2); // will print true 
+0

+1 'System.out.println (s == s2);' будет истинным, потому что s и s2 имеют одинаковое значение, поэтому для оптимизации они будут занимать одно и то же место в пуле строк, управляемом jvm. http://stackoverflow.com/questions/3801343/what-is-string-pool-in-java –

+0

@Rohit - спасибо, что это была моя ошибка, я забыл назначить –

+0

@Real. Добро пожаловать :) –

4

просто добавить s=s.trim();, потому что облицовку возвращает новую строку.

6

В строках Java immutable. Таким образом, s.trim() не изменяет исходную строку, а возвращает новую строку.

String trimmed = s.trim(); 
3

Well..string - неизменный объект. поэтому всякий раз, когда вы делаете trim(), он создает совершенно новый объект String, который должен иметь ссылку для доступа к нему. Поэтому присвойте ссылку на этот обрезанный объект String следующим образом.

s = s.trim(); 

или

trimmedS = s.trim(); 
2

Поймите, что String в Java неизменен. Это означает, что любая операция класса String не изменяет внутреннюю строку, но возвращает новый объект String.

Так что вам действительно нужно сделать

s = s.trim()

, который присваивает ссылку s на новый String объект, который имеет свою завершающую и начальные пробелы удалены.

2

trim функция возвращает копию исходной строки путем обрезки белых пространств, так что вам нужно, чтобы сохранить вновь возвращенную строку как s = s.trim()

Из javadocs of String#trim()

trim 

public String trim() 
Returns a copy of the string, with leading and trailing whitespace omitted. 
Смежные вопросы