Avatar billede p_r Nybegynder
24. november 2003 - 21:38 Der er 7 kommentarer og
1 løsning

opdeling af ord i javaprogram

Hejsa,

Jeg er ved at lave et spil i java og er nu stødt ind i et problem.
Jeg har en client og en server. Når serveren requester en string, har jeg defineret denne string i parseren til at være på 4 ord:

public class Parser
{

    private CommandWords commands;  // holds all valid command words

    public Parser()
    {
        commands = new CommandWords();
    }

    public Command getCommand(String inputFromClient)
    {
        String inputLine = inputFromClient;  // will hold the full input line
        String word1;
        String word2;
        String word3;
        String word4;
       

        StringTokenizer tokenizer = new StringTokenizer(inputLine);

        if(tokenizer.hasMoreTokens())
            word1 = tokenizer.nextToken();      // get first word
        else
            word1 = null;
        if(tokenizer.hasMoreTokens())
            word2 = tokenizer.nextToken();      // get second word
        else
            word2 = null;
        if(tokenizer.hasMoreTokens())
            word3 = tokenizer.nextToken();      // get third word
        else
            word3 = null;
        if(tokenizer.hasMoreTokens())
            word4 = tokenizer.nextToken();      // get fourth word
        else
            word4 = null;

        if(commands.isCommand(word1))
            return new Command(word1, word2, word3, word4);
        else
            return new Command(null, word2, word3, word4);
    }
     
}

Denne string består af af et kommandonavn (f.eks. add), et navn (f.eks. Bo Jensen eller Bo), antal tjente points og antal tjente penge.
Mit problem er nu, at hvis en person, f.eks. skriver at han hedder Bo Jensen (altså i 2 ord) er der jo pludselig 5 ord i det hele i stedet for 4. Jeg kunne godt tænke mig, at ordene blev adskildt med komma, når de bliver udskrevet, f.eks.: add, Bo Jensen, 100, 100.
Hver gang der er et mellemrun opfatter programmet det som om, at det er en ny variabel, men "Bo" og "Jensen" er jo den samme.
Hvordan løser jeg det? (hvis der altså er nogen der kan se hvad jeg mener)
Avatar billede _carsten Nybegynder
24. november 2003 - 21:46 #1
Bruge denne i stedet for

StringTokenizer tokenizer = new StringTokenizer(inputLine, ",");
Avatar billede _carsten Nybegynder
24. november 2003 - 21:46 #2
Den deler din tekststreng hver gang der er et komma
Avatar billede _carsten Nybegynder
24. november 2003 - 21:48 #3
Det smarteste var måske at bruge et semikolon ";" det er nok de færreste som kunne finde på at anvende det i forbindelse med deres navn
Avatar billede p_r Nybegynder
24. november 2003 - 21:57 #4
tak -ser lige om det virker
Avatar billede p_r Nybegynder
24. november 2003 - 22:09 #5
men skal jeg ændre noget i Client?


import java.io.*;
import java.net.*;

public class SimpleClient
{
    private BufferedReader inFromUser;
   
    public static void main(String argv[])
        throws UnknownHostException, IOException
    {
        SimpleClient client = new SimpleClient();
        client.start();
    }
   
    /**
    * Constructor for objects of class SimpleClient
    */
    public SimpleClient()
    {
        // create a buffered reader to read input from the terminal
        // (typed input from the user's keyboard)
        inFromUser =
            new BufferedReader(new InputStreamReader(System.in));
    }

    /**
    */
    public void start()
        throws UnknownHostException, IOException
    {
        Socket clientSocket = new Socket("localhost", 6789);

        DataOutputStream outToServer =
            new DataOutputStream(clientSocket.getOutputStream());

        BufferedReader inFromServer =
            new BufferedReader(new
            InputStreamReader(clientSocket.getInputStream()));

        System.out.print("Enter some text: ");
        String sentence = inFromUser.readLine();

        outToServer.writeBytes(sentence + '\n');

        String modifiedSentence = inFromServer.readLine();

        System.out.println("FROM SERVER: " + modifiedSentence);

        clientSocket.close();
                 
    }
}
Avatar billede p_r Nybegynder
24. november 2003 - 22:09 #6
eller skal jeg kun ændre:

StringTokenizer tokenizer = new StringTokenizer(inputLine, ",");  ?
Avatar billede _carsten Nybegynder
24. november 2003 - 22:14 #7
Med lidt hurtig læsning skal også have denne med:

String sentence = inFromUser.readLine() + ",";
Avatar billede p_r Nybegynder
24. november 2003 - 22:18 #8
det virker nu:)
mange tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester