ошибка с представлением одинарной кавычки в операторе switch - PullRequest
0 голосов
/ 18 июня 2011

Я должен удалить все комментарии в файле. Разделители комментариев в кавычках должны рассматриваться как текст и должны выводиться на экран. Цитаты внутри комментариев рассматриваются как другие комментарии и должны быть удалены.

У меня проблема со следующим оператором switch, когда дело доходит до одинарных кавычек, это выдает мне ошибку.

Я знаю, что это за ошибка, но я просто не знаю, как ее исправить.

import java.io.*;

public class Q3{

public static final int STATE_NORMAL = 0;
public static final int STATE_QUOTE_SINGLE = 1;    // this:'' 
public static final int STATE_QUOTE_DOUBLE = 5;    // this: "" 
public static final int STATE_SLASH = 2;            // this: /
public static final int STATE_SLASH_STAR = 3;     // this: /*    *
public static final int STATE_COMMENT = 4;          // this: /*     */  || /* only

public static void main(String[] argv) throws IOException{
    final int EOF = -1;
    InputStreamReader in = new InputStreamReader(System.in);
    int c;
    char[] buffer = new char[2];
    int currState = Q3.STATE_NORMAL;
    char outChar;        
    while((c = in.read()) != EOF){

        outChar = (char) c;
        switch (outChar){

            case '/' :   
             /*   if(currState == Q3.STATE_QUOTES)
                     currState ==Q3.STATE_QUOTES;         */
                if(currState == Q3.STATE_NORMAL)
                    currState = Q3.STATE_SLASH;
                else if(currState == Q3.STATE_COMMENT)
                    currState = Q3.STATE_NORMAL;


                break;

            case '*':
               if(currState == Q3.STATE_SLASH)
                    currState = Q3.STATE_COMMENT;

                break;

            case '"':
                if(currState == Q3.STATE_NORMAL)
                    currState = Q3.STATE_QUOTE_DOUBLE;
                if(currState == Q3.STATE_QUOTE_DOUBLE)
                    currState = Q3.STATE_NORMAL;

                break;

            *case ''':
                if(currState == Q3.STATE_NORMAL)
                    currState = Q3.STATE_QUOTE_SINGLE;
                if(currState == Q3.STATE_QUOTE_SINGLE)
                    currState = Q3.STATE_NORMAL;

                break;*


        }      
        if(currState != Q3.STATE_COMMENT)            
            System.out.print(outChar);
        }
    }
  }

Ответы [ 2 ]

4 голосов
/ 18 июня 2011

Вы должны будете избегать одинарных кавычек. используйте это

case '\''
0 голосов
/ 18 июня 2011

Попробуйте следующее: str = str.replaceAll ("/ . + /", ""); Я не уверен насчет контекста, но идея состоит в том, чтобы использовать регулярные выражения вместо упрощенного кода, как вы пытаетесь.

...