Как исправить: errorjava.util.regex.PatternSyntaxException для свиного латинского переводчика - PullRequest
0 голосов
/ 12 марта 2019

В моем свином латинском переводчике я получаю:

errorjava.util.regex.PatternSyntaxException: незамкнутый класс символов рядом с индексом 10 [C @ 55f96302

Каждый раз, когда я его компилирую.

В моем коде есть два метода: один для удаления специального символа в конце пользовательского ввода и разделения слов вверх, а другой для фактического перевода слов.

Вот мой код:

package midtermPigLatin;
import java.util.Scanner;
import java.util.Arrays;
import textio.TextIO;
public class midtermPigLatin {

    public static void main(String[] args)
    {

        String yourSentence="", line = "", single,line1 = "", pigLatin = "";
        Scanner input = new Scanner( System.in );
        Scanner word = new Scanner(line);
        String[] words;
        char[] special = {'.', '?','!'};
        String specialChar = special.toString();
        boolean again = true;
        try {
             System.out.print("Enter your words here: ");

            label1: while(input.hasNextLine())
             {
                 line = input.nextLine();

                 line1 = line.replaceAll(specialChar, "");
                 word = new Scanner (line);

             while(word.hasNext())
             {
                single = word.next();
                pigLatin = pigLatin(single);

             if (word.hasNext())
             {
                 System.out.print(pigLatin + " " );
             }
             else if(!word.hasNext())
             {
                 System.out.print( pigLatin);
            break label1;
             }
             }
             }
            }catch(Exception errMsg)
             {
                System.out.print(" error" + errMsg);
             }

    }
public static String pigLatin(String single)
{

    String newWord = "";
    try 
    {

                if (single.startsWith("a") || single.startsWith("e") || single.startsWith("i") || single.startsWith("o") || single.startsWith("u"))
                    newWord = (single + "way ");
                else if (single.startsWith("sh") || single.startsWith("ch") || single.startsWith("th"))
                    newWord =(single.substring(2)+single.substring(0,2)+"ay ");
                else
                    newWord = (single.substring(1)+single.substring(0,1)+"ay ");

       }

    catch (Exception errMsg)
    {
        System.out.println("Error in special" + errMsg);
    }
return newWord;
}
}

По правилам моих профессоров мне нужно иметь как минимум два метода и пробные уловки, чтобы
я не мог их вынуть.

1 Ответ

0 голосов
/ 12 марта 2019

В классе String replaceAll использует регулярное выражение, а не один символ. . и ? являются специальными символами в регулярном выражении, они означают любой символ или необязательно соответственно.

Есть два способа решить эту проблему.

1 Используйте String.replace(), он принимает один символ и заменяет каждое вхождение этого символа. Вы также должны сделать его String[], а затем перебрать каждую строку и заменить ее.

String[] special = {".", "?", "!"};
for(String specialChar : special) {
    line = line.replace(specialChar, "");
}

2 Вы можете изменить свой char [] на String и использовать реальное регулярное выражение

String[] specialChar = "[\\.\\?!]"

Любой из них позаботится о вашей ошибке компиляции.

Обновление:

Я забыл, что Java заставляет вас сбежать \

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...