2017-10-10 7 views
0

텍스트를 가짜 라틴어로 번역하는 프로그램을 작성하십시오. 영어는 모든 단어의 첫 글자를 가져 와서 단어 끝에 옮기고 각 단어에 'ay'를 추가하여 가짜 라틴어로 번역됩니다. 예를 들어, 프로그램이 키보드에서 문자열 "The quick brown fox"를 읽으면 화면에 "Hetay uickqay rownbay oxfay"라는 텍스트가 인쇄되어야합니다. "Iay ikelay rogrammingpay"가 "I like programming"화면에 인쇄되어야한다는 것을 읽으면됩니다. 내가 "내가 rogrammingp을 ikel"하지만 수 없습니다 얻을로서 내가 출력을 얻고 그것을텍스트를 가짜 라틴어로 번역하는 프로그램을 작성하십시오.

import java.util.Scanner; 

public class fakelatin2 { 


    public static void main(String[] args) 
    { 
    Scanner pig = new Scanner(System.in); 
    String word; // original word 
    String latin = ""; // pig latin translation, init to empty string 
    char first,last; 
    boolean cap = false; 
    String line; 

    System.out.print("enter line to translate: "); 
    line = pig.nextLine(); 
    pig = new Scanner(line); 

    // loop through all the words in the line 
    while (pig.hasNext()) // is there another word? 
    { 
     word = pig.next(); 
     first = word.charAt(0); 
     last=word.charAt(word.length()-1); 

     if ('A' <= first && first <= 'Z') // first is capital letter 
     { 
      first = Character.toLowerCase(first); 

      cap = true; 
     } 
     else 
      cap = false; 




      latin = word.replaceAll("ay", ""); 
     if(cap) 
     { 
      latin = "" + Character.toUpperCase(word.charAt(1)); 
     latin=latin+word.substring(word.length()-1); 
     } 
     System.out.print(latin + " "); 

    } 


    } 
} 

을 원하는

public class fakelatin {  

    public static void main(String[] args) 
    { 
    Scanner pig = new Scanner(System.in); 
    String word; original word 
    String latin = ""; 
    char first; 
    boolean cap = false; 
    String line; 

    System.out.print("enter line to translate: "); //enter the line to translate 
    line = pig.nextLine(); 
    pig = new Scanner(line); 

    // loop through all the words in the line 
    while (pig.hasNext()) // is there another word? 
    { 
     word = pig.next(); 
     first = word.charAt(0); 

     if ('A' <= first && first <= 'Z') // first is capital letter 
     { 
      first = Character.toLowerCase(first); 

      cap = true; 
     } 
     else 
      cap = false; 

    // test if first letter is a vowel 
     if (first=='a' || first=='e' || first=='i' || first=='o' || first=='u') 
      latin = word + "ay"; 

     else 
     { 
      if (cap) 
      { 
       latin = "" + Character.toUpperCase(word.charAt(1)); // char to String conversion 
       latin = latin + word.substring(2) + first + "ay"; 
      } 

      else 
       latin = word.substring(1) + first + "ay"; 


     } 



     System.out.print(latin + " "); 

    } 

    } 
} 

내가 돛 ikelay rogrammingpay로 출력을 가지고 다시

"내가 프로그래밍 좋아"
+0

'word.replaceAll ("ay", "")는 위험한 것처럼 보입니다. 만약 단어가 유희라면 (laypay)? 그것은 엉망이 될 것이고, 당신은'regex '(https://docs.oracle.com/javase/8/docs/api/java)를 사용하여'word.replaceAll ("ay $", "")'를 사용할 수있다. (예 : /util/regex/Pattern.html#sum)) 또는 'word.substring (0, word.length() - 2)' – phflack

+0

"Iikel Iikelrogrammingp"와 같은 결과를 출력합니다 – arfa

+0

"ay"의 모든 인스턴스를 제거하지만 latin = latin.substring (latin.length() - 1) + latin.substring (0, latin.length() - 1); ' – phflack

답변

0

는 다시 돼지 라틴어에서 변환 알고리즘 쓰는하려면

  1. 는 3 -에서 - 마지막 편지를 받기를. 원래 첫 글자입니다.
  2. 첫 글자가 대문자인지 확인하십시오. 1 단계에서 결과를 위로 변환하십시오.
  3. 마지막 3 글자를 제거하십시오. 오리지널 1st + "ay"
  4. 새로운 단어를 만듭니다. 이처럼

:

while (pig.hasNext()) // is there another word? 
{ 
    word = pig.next(); 

    // Step 1. 
    // Original first letter of word 
    last = word.charAt(word.length() - 3); 
    // word.length should always be >= 3, but I guess you should check 
    // that and print an error if it's not. 

    // Step 2. 
    // First char in latin word 
    first = word.charAt(0); 
    if (Character.isUpperCase(first)) // first is capital letter 
    { 
     last = Character.toUpperCase(last); 
    } 

    // Steps 3. and 4. 
    String original = last + word.substring(0, word.length() - 3).toLowerCase(); 

    System.out.print(original + " "); 
} 

참고 : 당신이 모음으로 시작하는 단어를 다시 변환 할 수있는 방법을 볼 수 없습니다. 예 : "end"는 가짜 - 라틴어의 "enday"입니다. 전환 할 때 "끝"또는 "굴"을 어떻게 알 수 있습니까? (왜냐하면 가짜 - 라틴어의 "동굴"또한 "끝"이기 때문입니다). 그러나 할당은 모음으로 시작하는 단어에 대해서는 아무 것도 말하지 않으므로 변환기에서 제거해야합니다. 문제 해결됨.

+0

일관성이 있어야합니다.'Character.isUpperCase (first)'Character.toUpperCase (last)'를 사용한다면' – phflack

+0

@phflack Ok. 업데이트 됨. –