2012-11-15 3 views
1

나는 대학을위한 그룹 프로젝트를 위해 돼지 라틴어 번역자를 만들었습니다. 우리는 실제로 번역기를 만들 필요가 없으며 우리가 원하는 어떤 식 으로든 문자열을 조작 할 수 있습니다. 나는 이것을 선택했다.)스캐너 클래스 : 단어로 음절 감지

가 내 번역기에 입력이 라틴기도가

, 처음 두 행은 어느 있습니다 :

내가 다음 코드를 사용하여 내 번역기를 만든
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"가되지만 여러 음절 단어는 "-way"가 대신 끝에 추가됩니다. 그래서 "양궁"은 "궁도"가되고 "결말"은 "결말"이됩니다.

단어가 단음 문자인지 검색하는 데 Java (및 스캐너 클래스를 사용하는 방법)이 있습니까?

이 시점에서 나는 초급 프로그래머 일 뿐이라는 것을 지적 할 것입니다. 그렇기는하지만 매우 복잡하기 만하면됩니다.

+0

관련 : [http://stackoverflow.com/a/405179/1225328](http://stackoverflow.com/a/405179/ 1225328) – sp00m

답변

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; 
} 
+0

나는 이것을 좋아하지만, 나는 어떤 피터인지 알 수있다. 당신의 방법은 라틴어 단어 "deum"을 두 개가 아닌 하나의 모음으로 반환합니다. 라틴어 규칙이 약간 다르므로 올바르지 않을 것입니다. 그래도 저는 초보 프로그래머이고 이것이 잘될 것이라고 생각합니다! –

+0

또한 코드에서 s = "x"+ s + "x"라인은 무엇을합니까? –

0

당신의 어려움이 자바를 쓰는 것에 있다고 생각하지 않지만, 한 마디로 음절을 세는 것에 대한 절대적인 규칙을 세우는 것으로 나는 생각하지 않습니다. 귀하의 언어에 대해서는 한 단어로 모음을 연속적으로 실행할 때마다 한 음절을 세지 만, 음절의 증거로는 e을 포함시키지 마십시오.

그래서,

eat

한 음절, 모음의 한 실행이있다;

ate 하나, 모음의 두 실행 단말 e

eight 하나 이하 한가지 음절 갖는다

eighteen

funicular 갖는 네

을 갖는다

이 간단한 규칙 집합에 대한 반례를 찾을 수 있을지는 모르겠지만 실제로 시작하기에 충분합니다.

0

제대로하고 싶다면 라틴 사전을 음절 표기와 함께 찾아야합니다. 라틴어는 상당히 규칙적이지만 예외가 있습니다. http://athirdway.com/glossa/와 같은 사전은 운율 분석을

crēdo, dĭdi, dĭtum 

을 가지고 있지만 한 번에 가능한 한 단어입니다. 음절에 대한 파서도 작성해야합니다. 나는 사람들의 말 언어가 해석하고 해석하기 쉽기 때문에 이것을 언급한다 - 그들은 보통 그렇지 않다!