PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java: Empty-Strings ermittleln?



Lin728
11-06-2002, 19:18
Hi!

Hab ein problem:

Wie kann man in Java feststellen, ob ein String leer ist?
Hab schon ein paar sachen ausprobiert:

1. if(string==null)
2.if(string.equals(""))
3.if(string.lenght==0)

Aber nichts davon funktioniert....

anda_skoa
11-06-2002, 22:01
Hängt davon ab, was du unter empty verstehst:
String string;
string==null fragt ab, ob die string Variable eine gültige Referenz ist.
string.equals("") fragt, ab ob der String gleich "" ist
string.length()==0 ist, true, wenn string keine Zeichen enthält.
string.trim().length()==0 ist true, wenn string außer whitespaces nichts enthält.

Ciao,
_

Lin728
12-06-2002, 06:51
Hab da nähmlich ein ganz komischer Phenomän:
String string = new String();

if(string.lenght()!=0)
{
System.out.print("\n\nZeichenanzahl"+string.lenght());
}

Normalerweise dürfte er nur bei einem String der Zeichen enthält in die if-Codeblock gehen.
Ergeht aber immer rein und bei stdout gibt er "Zeichenanzahl: 0" aus.

Vir@s
12-06-2002, 07:38
entweder hast du dich jetzt vertippt oder wirklich einen code Fehler:

statt string.lenght()!=0 gehört string.length()!=0

beachte des 'h' und des 't'

Mfg, Vir@s

anda_skoa
12-06-2002, 09:03
Dann würde nicht kompilieren, glaube ich.

Vielleicht ein Fehler in der VM.

Ich hab folgendes bei mir kompiliert:


public class Test
{
public static void main(String[] args)
{
String string = new String();
if (string.length()!=0)
System.out.println("Länge:"+string.length());
else
System.out.println("Leer");

}
}


#> javac Test.java
#> java Test
Leer
#>

Ciao,
_

Doc Maverick
12-06-2002, 13:26
Hi Clemens,
versuche doch mal string.length()>0 das sollte auf jeden Fall erwartungsgemäß funktionieren.
Welche VM benutzt Du denn?
Tschüß.

Lin728
13-06-2002, 20:31
Danke für das viele Feedback!
Ich verwende JDK1.3.1, der der beim LBuilder dabei ist, build24, original SUN
So, das ist mein Code:

String test = new String();

if((test.length())>0);
{
System.out.print("\n\nStringlänge:"+test.length());
periodicsave.setValue(Double.parseDouble(test));
}

Egal was ich mache, immer wieder geht er mir in die bedigung rein und hängt sich dann it folgender Meldung auf:

Exception in thread "main" java.lang.NumberFormatException: empty String
at java.lang.FloatingDecimal.readJavaFormatString(Flo atingDecimal.java:989)
at java.lang.Double.parseDouble(Double.java:184)
at getwidgets.setvalues(getwidgets.java:218)
at getwidgets.<init>(getwidgets.java:141)
at gui.<init>(gui.java:15)
at maingui.main(maingui.java:14)

Obwohl die ausgabe des programms so lautet:
Stringlänge:0

anda_skoa
13-06-2002, 21:57
Hmm, da hat's was!

Wenn auf die Variable test nicht in einem anderen Thread zugegriffen werden kann, und dort möglicherweise mit einem anderen Wert belegt wird, düfte das nicht passieren.

Also, meiner Meinung nach, entweder ein Problme mit Threads, oder ein Bug in der JVM

Aber abgesehen davon, sollte man bei den parse Methoden von Integer oder Double, immer die NumberFormatExcpetion catchen.



double d = 0.0; // guten default wählen
try {
d = Double.parseDouble(test);
} catch (java.lang.NumberFormatException e) {
// ups
e.printStackTrace(System.err);
// error recovery
}


Ciao,
_

Lin728
14-06-2002, 12:01
Der Tipp mit der try/catch anweisung is ne tools Idee, an das hab ich ja gar nicht gedacht. Wär nett, wenn ne kaputte config-datei daher kommt, könnte man einfach den Wert nicht setzten und das Proggi würde nicht abschmieren. Ich liebe Java!

Doc Maverick
14-06-2002, 15:02
Hi,
kein Problem! Es war wenigstens am?sant. ;)
Tsch??.

Stranger
14-06-2002, 21:24
hi,

es war das semikolon nach der if.

ist mir sofort aufgefallen , aber nur weil mir das auch schon mal passiert ist:)

wenn man das einmal tagelang durchgemacht hat dann vergisst man das nicht wieder;)


CU-Stranger

Lin728
15-06-2002, 09:26
Das ein so ein doofer semiclon so viel ausmachen kann ;-)

Vir@s
15-06-2002, 12:15
Hehe np :)

Aber den Semi. hast du ned geposted oder?

Auf jeden Fall seh ich erm ned im Source :)

Deshalb immer Copy&Paste :)

anda_skoa
15-06-2002, 15:29
Doch im siebten Posting.

Man würde ihn besser sehen, wenn der code in [ code ] tags gesetzt wäre.

Das mit dem Strichpunkt am Ende eines if's ist echt was lästiges, das hatte ich auch schon.

Aber bei statements wie


if (m_socket != 0);
{
delete m_socket,
}


findet man sowas ziemlich schnell :D

Ciao,
_

Stranger
15-06-2002, 23:02
@ Vir@s

zockst du ab und zu cs ?