Toon posts:

[JAVA] array met dynamische lengte

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb in de JavaDocs en in het boek van Deitel & Deitel gezocht maar ik kon er niets over vinden, kan ik een dergelijke constructie.

Ik heb de volgende functie gemaakt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
private void splitUp(String input, String output[], String arg)
//
//   pre:   - input bevat een string
//      - output is gedeclareerd als een array van string
//      - arg bevat de tekens die gebruikt worden voor de 
//      scheiding van de input string
//   post:  - output bevat de inhoud van de string input 
//      in elementen die gescheiden zijn middels de tekens
//      die in arg waren meegegeven
//      
//
{
   StringTokenizer tokens;
   int counter;
        
   tokens = new StringTokenizer(input,arg);
   counter = 0;
   
   while ( tokens.hasMoreTokens() and counter < output.length() )
   {
    output[counter] = tokens.nextToken();
    counter++;
   }
}

Het probleem is nu dat de lengte van het array output[] vast staat, ik wil nu hetzelfde bereiken als in deze functie maar dat ik dan op de een of andere manier een array terugkrijg die net zo lang is als het aantal elementen waarin ik hem ga scheiden

Hoe kan ik dit zo eenvoudig mogelijk voor elkaar krijgen?

Verwijderd

Met een ArrayList is waarschijnlijk de makkelijkste oplossing:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
public Object[] split(String input, String arg)
{
   StringTokenizer tokens;
   java.util.ArrayList list = new java.util.ArrayList();        
   tokens = new StringTokenizer(input,arg);
   
   while ( tokens.hasMoreTokens() )
   {
    list.add(tokens.nextToken());
   }

   return list.toArray();
}

[edit]
typos, en ik snap niet waarom je zo'n wazige (c-achtige?) constructie gebruik om de output van je functie in een van te voren gealloceerde array te stoppen. Misschien heb je het nodig, maar ik denk dat de bovenstaande functie meer is wat je zoekt.

  • Canard
  • Registratie: Oktober 1999
  • Laatst online: 22-08 13:18
ik zou trouwens de array output teruggeven als return-waarde en niet als parameter...

Dus:
code:
1
2
3
4
private String[] splitUp(String input, String arg)
{
   ...
}

Het aantal elementen kun je van te voren ophalen met countTokens() van je StringTokenizer, hiermee kun je dan je array dynamisch declareren...

simpeler als de oplossing hierboven...

  • Canard
  • Registratie: Oktober 1999
  • Laatst online: 22-08 13:18
Let op: Je retourneert een array van Object, moet je dus nog casten....
code:
1
output[counter] = tokens.nextToken();

wordt dan:
code:
1
output[counter] = (String)tokens.nextToken();

  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
eerst een vector maken en dan vullen en als klaar naar array?

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


  • Canard
  • Registratie: Oktober 1999
  • Laatst online: 22-08 13:18
vooruit dan ;)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private String[] splitUp(String input, String arg)
{
   StringTokenizer tokens = new StringTokenizer(input,arg);
   int counter = 0;
   String output[] = new String[tokens.countTokens()];
         
   while (tokens.hasMoreTokens())
   {
    output[counter] = (String)tokens.nextToken();
    counter++;
   }

   return output;
}

Verwijderd

Topicstarter
die c-achtige constructie komt omdat ik meer ervaring in c dan in java heb en dan ben je altijd geneigd om in c-stijl te programmeren.

  • Bobco
  • Registratie: Januari 2001
  • Laatst online: 30-10-2023

Bobco

I used to dream about Verona.

Op vrijdag 19 juli 2002 10:39 schreef KlukKluk het volgende:
die c-achtige constructie komt omdat ik meer ervaring in c dan in java heb en dan ben je altijd geneigd om in c-stijl te programmeren.
Een eerste liefde vergeet je nooit ;) Maar het is wel handig om eens wat JavaDoc door te lezen over de interfaces en classes in java.util. Daar zitten namelijk hele handige dingetjes tussen en je hoeft je al snel niet meer druk te maken over dit soort low-level achtige activiteiten.

With the light in our eyes, it's hard to see.

Pagina: 1