работа со строками
От: Albatross  
Дата: 21.08.07 12:29
Оценка:
в книжке рейли вот что есть:



Sub Hain()
Dim s as String
Dim i as integer
s="This is a test
System.Console.WriteLine(s & "|")
s=s.Trim()
System.Console.WriteLine(s & "|")
S="46"
1=4
System. Console. WriteLinefi + System.Convert.Tolnt32(s))
End Sub
End module

"
В процессе исполнения этой небольшой программы з консоль
выводится следующее;
This is a test |
This is a test I
50
Сначала создается и выводится в консоль строка с несколькими
пробелами в конце. Далее вызывается метод Trim, и теперь стро-
ка отображается без пробелов между словом test и вертикальной
чертой. После этого мы присваиваем переменой s значение рав-
ное строке «46». Обратите внимание, что при этом старая строка
(«This is a test») осталась неизменной, вместо этого создана копия.
Строки неизменяемы — после создания их нельзя изменить напря-
мую. Если удобнее напрямую изменить существующую строку, а
не создавать новую копию, рекомендуется использовать класс
StringBuilder."

Что я тут ничего не понимаю! что значит "Обратите внимание, что при этом старая строка
(«This is a test») осталась неизменной, вместо этого создана копия"?
Какая копия? Где создана?
Или речь о том, что в выражении s=s.Trim() s будет указывать на новый объект, а старый объект потеряется и будет собран мусорщиком?
Re: работа со строками
От: MY Украина  
Дата: 21.08.07 13:13
Оценка:
Здравствуйте, Albatross, Вы писали:

A>в книжке рейли вот что есть:


1 Некрасиво приводить неработающий код, написанный в спешке.
2 Вот работающий обработчик события онклик в WinApp

 Private Sub btnTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTest.Click
        txtResult.Text = ""
        Dim s As String
        Dim s1 As String
        Dim i As Integer
        s = "This is a test  "
        txtResult.Text += (s & "|") + Environment.NewLine
        s1 = s.Trim()
        txtResult.Text += (s1 & "|") + Environment.NewLine
        txtResult.Text += (s & "|") + Environment.NewLine   's not changed
        s = "46"
        i = 4
        txtResult.Text += (i + System.Convert.ToInt32(s)).ToString()
    End Sub


Судя по всему имелось ввиду что:
s.Trim() не меняет строку s, а лишь возвращает измененную версию ее.
Это явно видно в строке с коментариями.
Re: работа со строками
От: Ivan Danilov Украина  
Дата: 23.08.07 20:23
Оценка:
Здравствуйте, Albatross, Вы писали:

<skipped>

Почитай Рихтера. Там подробно рассказана работа со строками.
Любое изменение класса String приводит, фактически к вызову конструктора, который создает новую строку.
Отличие StringBuilder'а в том, что он на самом деле работает со string внутренними методами и местами использует unsafe-операторы. Если интересно как все это работает — глянь рефлектором.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: работа со строками
От: spider1970  
Дата: 23.08.07 20:57
Оценка:
stroka eto object u nee posledovatelnost simvolov opredelennoi dlini opredeliaemoi vo vremia construirovania.Dobavit simvol tuda ne mozez.sam po sebe + eto operator visivaemii dlia stroki.On sozdaet novuiu stroku dlinoi pervoi stroki plus vtoroi ,no opertator = vidvo v s kopiruet vse no dlina stroki strogo opredelena.kstati ti mog izmenit sto-to i po sosednemu adresu priv

Sub Hain()
Dim s as String
Dim i as integer
s="This is a test"
System.Console.WriteLine(s & "|")
s="trim trim trim trim"
System.Console.WriteLine(s & "|")
S="46"
1=4
System. Console. WriteLinefi + System.Convert.Tolnt32(s))
End Sub
End module
posmotri sto vivodit
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.