在我的猪拉丁语翻译器中,我得到:
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;
}
}
按照我的教授的规定,我至少必须要有两种方法并要尝试才能实现
我不能把那些拿出来。
答案 0 :(得分:0)
在String类replaceAll
中使用正则表达式而不是单个字符。 .
和?
是正则表达式中的特殊字符,它们分别表示任何字符或可选字符。
有两种方法可以解决此问题。
1使用String.replace()
,它将使用一个字符并替换该字符的每次出现。您还应该将其设置为String[]
,然后遍历每个字符串并替换它。
String[] special = {".", "?", "!"};
for(String specialChar : special) {
line = line.replace(specialChar, "");
}
2您可以将char []更改为String并使用真正的正则表达式
String[] specialChar = "[\\.\\?!]"
任何一种都可以解决您的编译错误。
更新:
我忘了Java使您逃脱\