我一直在为大学的小组项目创建一个Pig Latin翻译器(我们不必实际制作翻译器,只是以我们想要的任何方式操纵字符串,我选择了这个)。
我翻译的输入是拉丁语祈祷,前两行是:
credo in unum deum
patrem omnipotentem
我使用以下代码创建了我的翻译器:
public static void pigLatinify(String fname) throws IOException
{
File file = new File("projectdata.txt");
try
{
Scanner scan1 = new Scanner(file);
while (scan1.hasNextLine())
{
Scanner scan2 = new Scanner(scan1.nextLine());
boolean test2;
while (test2 = scan2.hasNext())
{
String s = scan2.next();
char firstLetter = s.charAt(0);
if (firstLetter=='a' || firstLetter=='i' || firstLetter=='o' || firstLetter=='e' ||
firstLetter=='u' || firstLetter=='A' || firstLetter=='I' || firstLetter=='O' ||
firstLetter=='E' || firstLetter=='U')
{
String output = s + "hay" + " ";
System.out.print(output);
}
else
{
String restOfWord = s.substring(1);
String output = restOfWord + firstLetter + "ay" + " ";
System.out.print(output);
}
}
System.out.println("");
}
scan1.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
}
它输出整个祈祷井,前两行输出如下:
redocay inhay unumhay eumday
atrempay omnipotentemhay
然而,在真正的猪拉丁语中,单音节词保持不变并且在末尾添加了“-hay”,因此“it”变为“ithay”,“egg”变为“egghay”,但多个音节词有“ - 方式“添加到最后,所以”射箭“变成”射箭“和”结束“变成”结束“。
Java(以及我正在使用的扫描仪类)是否有办法检测单词是否为单音节?
此时我还会指出我只是一个初学程序员,所以如果有,但它非常复杂,请随意说!! {/ p>
答案 0 :(得分:0)
我认为你的困难不在于编写Java,而在于建立一个简单的单词计数音节的规则。对于你的语言,我倾向于为一个单词中的每个连续元音计算一个音节,但不要将终端e
作为音节的证据。
所以,
eat
有一个音节,只有一个元音;
ate
有一个,两个元音,少于一个终端e
eight
有一个音节
eighteen
有两个
funicular
有四个
等
我很确定你会找到这套简单规则的反例,但也许它们足以让你开始。
答案 1 :(得分:0)
如果你想要正确地做,你将不得不找到一个带有音节的拉丁字典。拉丁语是相当规律的,但也有例外。像http://athirdway.com/glossa/这样的字典有scansion
crēdo, dĭdi, dĭtum
但一次只能提供一个字。您还必须为音节编写解析器。我之所以提到这一点是因为人们的语言很容易解析和解释 - 它们通常不是!
答案 2 :(得分:0)
如何获得这样的音节数:
/**
* Get the number of syllables for a given word
* @param s the given word
* @return the number of syllables
*/
public static int getNumberOfSyllables(String s) {
s = s.trim();
if (s.length() <= 3) {
return 1;
}
s = s.toLowerCase();
s = s.replaceAll("[aeiouy]+", "a");
s = "x" + s + "x";
return s.split("a").length - 1;
}