StringBuffer, nie można skonkatenować z innym stringiem

0

Pisałem to już na newbie ale nikt nie odpowiedział
Jeśli dopisuje po zawartości stringbuffer w tej samej linii, to to co dopisuje się nie wyśietli

StringBuffer sa=new StringBuffer("Witamy");
sa.setLength(10);
System.out.println(sa.length());
System.out.print("to sie wyswietli "+sa+" to sie nie wyswietli");
System.out.println("koniecccccccccccccccccccccccccccccccccccccc");// <<=============to sie nie wyświetli
0

ale jaja, faktycznie
a jak sie zakomentuje setLength to dziala
dziala jak sie tez zapisze ten skladany string do tymczasowej zmiennej
albo jak sie zamist print da println w przedostatniej linijce
wg mnie to moze byc jakis bug
skad masz w ogole taki kod?

0

sprawdzilem i wnioski to sa takie

jak tworzysz Sb ze stringiem witamy,to mam on 6 znakow, jak wywolujesz setLenght(10) to dodawane sa znaki null '\u0000'. System.out.print() jak dostanie stringa ktory sie konczy nullem to chyba wariuje bo dalej juz nie umie nic wypisac! zmienisz na println i dziala
np ten kod:

String s = new String(new byte[] {'\u0000'});
System.out.print(s);
System.out.println("dupa");

nic nie wypisze!

jakis bug chyba?

pozdrawiam

0

@grommit, nie klnij, nawet w kodzie.

Jeszcze pytanie kontrolne pod jaką Javą? Sprawdzałem na 1.6_03 i ładnie się wyświetlało

0
grommit napisał(a)

...wg mnie to moze byc jakis bug

ja mam jdk dla linuxa, może w jdk dla windows tego nie bedzie(jeśli to bug).

grommit napisał(a)

.... skad masz w ogole taki kod?

samo mi wyszło podczas zapoznawania się z klasą StringBuffer.

0
Koziołek napisał(a)

Jeszcze pytanie kontrolne pod jaką Javą? Sprawdzałem na 1.6_03 i ładnie się wyświetlało

też mam tą wersje, ale nie działa.

0

U mnie (XP, 1.6.03) wyświetla, ale nie rozumiem dlaczego. Bajt 0 kończy String, operator konkatenacji wyrzuca ten bajt ze składników i dodaje na końcu posklejanego Stringa. Jeśli z każdego składnika wyrzuca wszystkie końcowe zera, to powinno sie pojawić

 to sie wyswietli Witamyto sie nie wyswietli

jeśli wyrzuca tylko ostatnie zero. to powinno się pojawić

 to sie wyswietli Witamy

a pojawia się

 to sie wyswietli Witamy     to sie nie wyswietli

???

0

tak, na jdk-linux 1.6_03, 0X0000 oznacza koniec stringu, tj do kąd ma wyświetlać.
Ale mimo dodania wyzerowanych bajtów można dodawać dalej znaki do tego stringa i je podejrzeć

String s="test";
s+="\u00000";
String a="jest "+s+" nie ma"+s+s;
System.out.println(a);
for(int i=0;i<a.length();i++)
{
	System.out.println((int)a.charAt(i));
}

wynik

jest t
106
101
115
116
32
116
0
48
32
110
105
101
32
109
97
116
0
48
116
0
48
0

U mnie na Linuksie nie działa. Java 1.6.0 update 4.
To może być kwestia bibliotek w systemie / samego systemu.
Należy zgłosić jako błąd - choć może drobny, ale jednak. Nie powinno być takich różnic między systemami.

0

@Królik, a co myślisz o tym, że konsola linuxowa reaguje inaczej niż konsola windowsowa? Na przykład traktuje znak \u00000 jako EOF, a pod windą wszystko jest wypisywane bez szemrania?

0

ja rowniez testowalem pod linuksem, jdk 1.6_03
jesli linux inaczej jakos taktuje 0000 to ijava musi o tym widziec
jak na moje to bug
d.u.p.a to nie przeklenstwo :>
pozdrawiam

0
kapitan_rzbik napisał(a)

tak, na jdk-linux 1.6_03, 0X0000 oznacza koniec stringu

A masz na to dowód(tzn. gdzie to jest w dokumentacji)?

To nie jest C aby napisy były zakończone NULLem. Długość napisu jest trzymana w oddzielnym polu.

Moim zdaniem jest to problem z terminalem.

Proponuję następujące rozwiązanie.
Strumień wyjścia z programu przekierować do pliku, a następnie obejrzeć ten plik w Vimie lub innym edytorze, który umożliwia wyświetlanie znaków specjalnych.

0

@__krzysiek85, skorzystałem z twojej rady i przekierowałem wyjście do pliku. Niezależnie od systemu jest w pliku sekwencja "Witamy\0\0\0\0 to się nie wyświetli". Wygląd na konsoli zależy natomiast od systemu, w domu (XP) jest to wyświetlane jako "Witamy to się ...", na uczelni (Linux PLD, połączenie przez Putty. java 1.6.03) jest to wyświetlane jako "Witamy to się nie wyswietli"

0

Eksperymentowałem trochę z wypisywaniem obiektu String, który zawiera wewnątrz "\0". W XP taki obiekt wygląda inaczej na konsoli, inaczej jako title w JFrame, jeszcze inaczej w komponentach (JLabel,JButton, JTextArea).
Morał - pisać program tak by taki dziwny String nie powstał.

0

IMO przydaloby sie to zglosic..

pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1