Toon posts:

[JAVA] de waarde van een leeg JTextField

Pagina: 1
Acties:
  • 233 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
goeden dag menschen,

ik heb een progje, waar mensen zelf dingen in kunnen vullen,
de ingevulde dingen worden uiteindelijk geprint, hebben ze niets
ingevuld, dan mag er natuurlijk ook niets geprint worden. B)

stukje code:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
private String setGegevensString(int r){
      
      String[] klTF = new String[7];
      String[] grTF = new String[7];
           
      String a = "Aantal: ";
      String o = "Omschrijving: ";
      char c_nl = '\n';
      String nl = Character.toString(c_nl);
      
      for (int z = 0; z < 7; z++){
          //----------------------------------------------
          if (kleineTF[z].getText() == ""){
              klTF[z] = "";
          }
          else {
              klTF[z] = nl + nl + nl + nl + a + kleineTF[z].getText() + nl + nl;
          }
          //---------------------------------------------
          if (groteTF[z].getText() == ""){
              grTF[z] = "";
          }
          else {
              grTF[z] = o + nl + groteTF[z].getText() + nl + nl;
          }

String geheel = klTF[r] + grTF[r];
return gheel;

het probleem is dus, dat de string waarde niet "" is, ook geen null....
(bij een andere situatie ging de "" wel op....)
kheb meerdere dingen geprobeerd
o.a. een nieuw JTexField aangemaakt, en de waarde uit dit textfield gehaald
en vergeleken met de waarde van kleineTF[z].
Java:
1
2
JTextField niets = new JTextField(8);
if (kleineTF[z].getText() == niets.getText()){ }

doet ie dus niet... :?
als ik de waarde van kleineTF in System.out.println() gooi, dan geeft ie gewoon
aan dat er niets in staat (GEEN nullpointerexception maar "").

weet iemand dus toevallig de waarde van een leeg JTextField....
of waar anders het probleem zit.... :)

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 18:32
code:
1
kleineTF[z].getText().equals("");

Werkt beter waarschijnlijk.

Edit: uitleg
Met == controleer je of de reference van een Object hetzelfde is, met .equals() vergelijk je of het Object gelijk is.

[ Voor 99% gewijzigd door sig69 op 27-04-2006 14:12 ]

Roomba E5 te koop


  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Even door de java api bladeren ... String.length() bijvoorbeeld?

Sowieso vage code :? ...

[ Voor 19% gewijzigd door RedRose op 27-04-2006 14:14 ]

Sundown Circus


  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 22:47

Gonadan

Admin Beeld & Geluid, Harde Waren
sig69 schreef op donderdag 27 april 2006 @ 14:10:
code:
1
kleineTF[z].getText().equals("");

Werkt beter waarschijnlijk.

Edit: uitleg
Met == controleer je of de reference van een Object hetzelfde is, met .equals() vergelijk je of het Object gelijk is.
En tekst bestaan over het algemeen als String, en dat is inderdaad een object :)

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Verwijderd

Topicstarter
ah super.
de .equals werkt wel, nooit geweten dat het zo zat.
bedankt beiden _/-\o_ !

  • CrisT
  • Registratie: Maart 2003
  • Laatst online: 21-02 20:05
Java:
1
2
JTextField niets = new JTextField(8);
if (kleineTF[z].getText() == niets.getText()){ }


Doe gewoon
Java:
1
if (kleineTF[z].getText().lenght() == 0{ }

zoals hierboven al is gezegd, is logischer en scheelt weer een object.

Nederlandse Civilization community DutchCiv.nl


  • glmona
  • Registratie: Maart 2005
  • Laatst online: 26-01 19:35
Of dit:
Java:
1
if (kleineTF[z].getText().equals("")){ }


edit:
typo

[ Voor 35% gewijzigd door glmona op 27-04-2006 16:15 ]


  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

glmona schreef op donderdag 27 april 2006 @ 16:08:
Of dit:
Java:
1
if (kleineTF[z].getText().equals("")){ }


edit:
typo
Zoals al eerder gezegd is resulteert dit in een extra object, die helemaal niet nodig is. "" is equivalent aan het instantieren van een nieuwe String.

  • momania
  • Registratie: Mei 2000
  • Laatst online: 18:04

momania

iPhone 30! Bam!

CrisT schreef op donderdag 27 april 2006 @ 15:47:
Java:
1
2
JTextField niets = new JTextField(8);
if (kleineTF[z].getText() == niets.getText()){ }


Doe gewoon
Java:
1
if (kleineTF[z].getText().lenght() == 0{ }

zoals hierboven al is gezegd, is logischer en scheelt weer een object.
Doe liever:
Java:
1
if (kleineTF[z].getText() == null || kleineTF[z].getText().trim().lenght() == 0{ }

Dan vang je null values en lege Strings ook gelijk af :)

Zelf gebruik ik altijd graag de StringUtils van apache commons lang, die doet eigenlijk hetzelfde.
Java:
1
if (StringUtils.isBlank(stringValue)) {}

[ Voor 14% gewijzigd door momania op 27-04-2006 17:05 ]

Neem je whisky mee, is het te weinig... *zucht*


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 17:25

Robtimus

me Robtimus no like you

prototype schreef op donderdag 27 april 2006 @ 17:01:
Zoals al eerder gezegd is resulteert dit in een extra object, die helemaal niet nodig is. "" is equivalent aan het instantieren van een nieuwe String.
Niet per se. Constante Strings zoals in dit geval "" worden op de zogenaamde String Heap gecreeerd. Basically wordt er per class voor elke constante 1 waarde op de String Heap gecreeerd. Er wordt dus een nieuwe String gecreeerd ja - 1x. Maar zelf zou ik ook getText().trim().length() gebruiken. Hier wordt ook een nieuw String object gecreeerd, maar je controleert meteen of je String niet toevallig alleen wat spaties bevat.
momania schreef op donderdag 27 april 2006 @ 17:04:
Dan vang je null values en lege Strings ook gelijk af :)
Maar JTextField.getText() geeft nooit null terug maar altijd een String object.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • momania
  • Registratie: Mei 2000
  • Laatst online: 18:04

momania

iPhone 30! Bam!

IceManX schreef op donderdag 27 april 2006 @ 21:55:
[...]

Maar JTextField.getText() geeft nooit null terug maar altijd een String object.
Ah ok, dat wist ik niet meer zeker.

Neem je whisky mee, is het te weinig... *zucht*


  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 21:17
prototype schreef op donderdag 27 april 2006 @ 17:01:
Zoals al eerder gezegd is resulteert dit in een extra object, die helemaal niet nodig is. "" is equivalent aan het instantieren van een nieuwe String.
Tegenwoordig niet meer, de lege string en andere statische Strings worden gecached door de JVM.

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

DaCoTa schreef op vrijdag 28 april 2006 @ 01:08:
[...]

Tegenwoordig niet meer, de lege string en andere statische Strings worden gecached door de JVM.
Thanks for repeating that ;) Was even vergeten dat dergelijke objecten gepooled worden.

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 23:39
prototype schreef op donderdag 27 april 2006 @ 17:01:
[...]


Zoals al eerder gezegd is resulteert dit in een extra object, die helemaal niet nodig is. "" is equivalent aan het instantieren van een nieuwe String.
Niet helemaal... :)

String1 = "";
String2 = "";

Resulteert in 1 String object. Dus ja als het de eerste keer "" is, dan is dat een extra object. Als het de 2de keer is, dan niet.

Zie: http://java.sun.com/j2se/...lang/String.html#intern()

[ Voor 15% gewijzigd door The - DDD op 28-04-2006 12:04 ]


  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Leest iemand uberhaupt wel anderman's replies? ;)

  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 21:17
The - DDD schreef op vrijdag 28 april 2006 @ 12:03:
[...]
Niet helemaal... :)

String1 = "";
String2 = "";

Resulteert in 1 String object. Dus ja als het de eerste keer "" is, dan is dat een extra object. Als het de 2de keer is, dan niet.

Zie: http://java.sun.com/j2se/...lang/String.html#intern()
Uit die JavaDoc:
All literal strings and string-valued constant expressions are interned.
Dan zou dat betekenen dat de "" al gepooled wordt op het moment dat de class geladen wordt. Of eerder, aangezien het wel aannemelijk is dat er ergens in de rest van de Java standaard classes code ook wel een "" als constante gedefinieerd staat. ;)

Als je trouwens §3.10.5 van de Language spec leest, is mijn conclusie eigenlijk dat je nooit == moet gebruiken, maar altijd equals :) De regels die voor == gelden zijn echt niet triviaal.

[ Voor 9% gewijzigd door DaCoTa op 28-04-2006 16:06 ]


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 23:39
Poolen en cachen zijn beiden niet de juiste aanduiding.

Daarbij is het ook nog is zo dat hetgeen DaCoTa beschrijft al sinds de eerste versie van de JLS zo functioneert.

Een String object die op compile-time bepaald kan worden zal op compile time bepaalt worden en daarna behandeld worden als een literal string. Compile time bepaling vindt plaats wanneer je enkel een literal of een constante gebruikt.
JLS v1
JLS v2
JLS v3

Dus je zou kunnen stellen dat ik zo ongeveer de enige juiste reply had in deze thread.
(Insert manical laughter.. ) :+ (Sorry, bijna weekend enzo....)

[ Voor 8% gewijzigd door The - DDD op 28-04-2006 16:40 ]


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 23:39
DaCoTa schreef op vrijdag 28 april 2006 @ 16:05:
[...]

Uit die JavaDoc:

[...]

Dan zou dat betekenen dat de "" al gepooled wordt op het moment dat de class geladen wordt. Of eerder, aangezien het wel aannemelijk is dat er ergens in de rest van de Java standaard classes code ook wel een "" als constante gedefinieerd staat. ;)

Als je trouwens §3.10.5 van de Language spec leest, is mijn conclusie eigenlijk dat je nooit == moet gebruiken, maar altijd equals :) De regels die voor == gelden zijn echt niet triviaal.
En ja, dat "" was wel een slecht voorbeeld :D Had beter "LSDKJFldjfwr097esoifLDKJFs" kunnen noemen. :P

Je kan heel goed == gebruiken. Gewoon een kwestie van al je Strings internen. In principe wil je dat bijna nooit doen. Maar trek de Xerces broncode maar is open. 't Staat er vol mee, schijnt dat ze daarmee de XML processing een stuk sneller kunnen doen. Blijkbaar is voor xerces alle tokens 1 keer internen goedkoper dan alle vergelijkingen doen middels equals. Maar je moet wel een xml parser of iets dergelijks zijn om dat effect te kunnen meten.
Pagina: 1