Почему этот токенайзер заставляет меня приводить к строке? - PullRequest
3 голосов
/ 13 февраля 2012

Я думаю, что разбил это до самой основной формы. Если нет, то я прошу прощения и постараюсь отредактировать его. Почему в моем цикле while мне нужно привести String для FirstName, если я уже установил переменную как String? Я делаю что-то неправильно? Я пытаюсь установить переменную FirstName равной первому токену, который должен быть первым словом текстового файла и т. Д.

  try
            {
                BufferedReader infileCust =
                        new BufferedReader(new FileReader("C:\\custDat.txt"));
    }
      catch(FileNotFoundException fnfe)
            {
                System.out.println(fnfe.toString());
            }
            catch(IOException ioe)
            {
                System.out.println(ioe.toString());
            }
        }

        public static void createCustomerList(BufferedReader infileCust,
                CustomerList custList) throws IOException
    {    
        String  FirstName;
        String  LastName;
        int  CustId;


        //take first line of strings before breaking them up to first last and cust ID
        String StringToBreak = infileCust.readLine();
        //split up the string with string tokenizer
        StringTokenizer st = new StringTokenizer(StringToBreak);

        while(st.hasMoreElements()){
        FirstName = (String) st.nextElement();
        LastName = (String) st.nextElement();
        CustId = Integer.parseInt((String) st.nextElement());

        }

Редактировать: Я могу вместо этого использовать nextToken (). Но почему мои переменные отображаются как неиспользуемые? Разве они не входят в рамки цикла while?

Ответы [ 3 ]

5 голосов
/ 13 февраля 2012

Это потому, что nextElement возвращает Object.Если вы вызываете nextToken, вам не нужно будет приводить.

Из документации:

public Object nextElement ()

Возвращает то же значение, что иМетод nextToken, за исключением того, что его объявленным возвращаемым значением является Object, а не String. Он существует для того, чтобы этот класс мог реализовывать интерфейс перечисления.

EDIT Относительно переменных, которые не используются: причина, по которой вы получаете предупреждение, заключается в том, чтопеременные присваиваются, но не распечатываются, не сохраняются и не анализируются каким-либо образом.Если вы добавите вызов, скажем, writeln с именем и фамилией, предупреждения исчезнут.

3 голосов
/ 13 февраля 2012

Потому что StringTokenizer.nextElement возвращает java.lang.Object.См. Документы здесь: http://docs.oracle.com/javase/1.4.2/docs/api/java/util/StringTokenizer.html Вы можете использовать вместо этого nextToken() : String, если хотите.

2 голосов
/ 13 февраля 2012

Поскольку StringTokenizer.nextElement () возвращает

То же значение, что и у метода nextToken, за исключением того, что его объявленным возвращаемым значением является Object, а не String.It, существуеткласс может реализовывать интерфейс перечисления.

...