0

字句解析プログラムを書いています。とてもシンプルだと思います。実行されますが、入力を入力するたびに、プログラムはそれを無効な文字として扱います(有効であると想定されている場合でも)。私は何を間違えましたか?

import java.util.*;
import java.util.Scanner;

public class LAnalyze{

    public static int i;

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        String s;


        System.out.println("Input something to lexically analyze:  ");
        s = input.next( );
        int j = 1;

        if( s.charAt(i)!='a'||s.charAt(i)!='b'||s.charAt(i)!='c'||s.charAt(i)!='d'||s.charAt(i)!='e'||s.charAt(i)!='f'||
            s.charAt(i)!='g'||s.charAt(i)!='h'||s.charAt(i)!='i'||s.charAt(i)!='j'||s.charAt(i)!='k'||s.charAt(i)!='l'||
            s.charAt(i)!='m'||s.charAt(i)!='n'||s.charAt(i)!='o'||s.charAt(i)!='p'||s.charAt(i)!='q'||s.charAt(i)!='r'||
            s.charAt(i)!='s'||s.charAt(i)!='t'||s.charAt(i)!='u'||s.charAt(i)!='v'||s.charAt(i)!='w'||s.charAt(i)!='x'||
            s.charAt(i)!='y'||s.charAt(i)!='z'||s.charAt(i)!='A'||s.charAt(i)!='B'||s.charAt(i)!='C'||s.charAt(i)!='D'||
            s.charAt(i)!='E'||s.charAt(i)!='F'||s.charAt(i)!='G'||s.charAt(i)!='H'||s.charAt(i)!='I'||s.charAt(i)!='J'||
            s.charAt(i)!='K'||s.charAt(i)!='L'||s.charAt(i)!='M'||s.charAt(i)!='N'||s.charAt(i)!='O'||s.charAt(i)!='P'||
            s.charAt(i)!='Q'||s.charAt(i)!='R'||s.charAt(i)!='S'||s.charAt(i)!='T'||s.charAt(i)!='U'||s.charAt(i)!='V'||
            s.charAt(i)!='W'||s.charAt(i)!='X'||s.charAt(i)!='Y'||s.charAt(i)!='Z'||s.charAt(i)!='0'||s.charAt(i)!='1'||
            s.charAt(i)!='2'||s.charAt(i)!='3'||s.charAt(i)!='4'||s.charAt(i)!='5'||s.charAt(i)!='6'||s.charAt(i)!='7'||
            s.charAt(i)!='8'||s.charAt(i)!='9'||s.charAt(i)!='-'||s.charAt(i)!='_'||s.charAt(i)!=' ') {

            for (int i = 0; i < s.length(); i++) {  
                System.out.println("Token " + j + " = " + (s.charAt(i)));
                j++;
            }
        }
        else {
            System.out.println("Invalid character(s) entered.. Program terminated!\n");
            System.exit(0);
        }

    }
}
4

2 に答える 2

1

このコードから得ているとあなたが言っている結果を得ることは不可能に思えます。あなたのif文が間違っています。現状のままでは、それは常に真実です。文字は常に、ある文字と等しくないか、別の文字と等しくありません。!= はすべて == にする必要があります。また、それを報告するelse部分の悪い文字を出力します。

System.out.println("bad character " + s.charAt(i) +
     " decimal value: " + (int) s.charAt(i));

Scanner は独自に字句解析を行います。つまり、文字列全体ではなく、トークンを返します。Console を使用して、入力されたすべてのものを取得する必要があると思います。

Console console = System.console();
s = console.readLine("Input something to lexically analyze:  "); 
于 2012-10-28T22:03:41.150 に答える