如何解决:猪拉丁语翻译器的errorjava.util.regex.PatternSyntaxException

时间:2019-03-12 03:48:26

标签: java regex

在我的猪拉丁语翻译器中,我得到:

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 :(得分:0)

在String类replaceAll中使用正则表达式而不是单个字符。 .?是正则表达式中的特殊字符,它们分别表示任何字符或可选字符。

有两种方法可以解决此问题。

1使用String.replace(),它将使用一个字符并替换该字符的每次出现。您还应该将其设置为String[],然后遍历每个字符串并替换它。

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

2您可以将char []更改为String并使用真正的正则表达式

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

任何一种都可以解决您的编译错误。

更新:

我忘了Java使您逃脱\