2013-07-12 3 views
0

저는 처음 프로그래머이며 돼지 라틴 Translator를 써야합니다. 나는이 코드를 번역하고 한 단어로 말할 것이다. 입력을 공간을 통해 별도의 문자열로 분리하는 방법을 알아야합니다. 일단 내가 이것을 이해할 수 있으면 (그리고 나는 배열을 이해하려고 노력하고 있다고 믿는다.) 나는 필요에 따라 코드를 편집 할 수있을 것이다. 고마워요!어떻게 문자열을 분리합니까 : Pig Latin Translator

import java.io.*; 
import java.util.*; 

public class Main 
{ 
    public static void main (String[] args) 
    { 
    Scanner scan = new Scanner(System.in); 
    String str = scan.nextLine(); 
    String a = str.substring(0,1); 
    String b = str.substring(0,2); 
    String c = str.substring(0,3); 
    String d = str.substring(0,4); 
    String answer = ""; 
    if (str.startsWith("a") || str.startsWith("e") || str.startsWith("i") || str.startsWith("o") || str.startsWith("u")) 
    { 
     System.out.print(str + "way"); 
     } 
    else 
     { 
     answer = str.substring(2,str.length()); 
     String answer2 = str.substring(1,str.length()); 
     String answer3 = str.substring(3,str.length()); 
     String answer4 = str.substring(4,str.length()); 
     if (!(d.contains("a") || d.contains("e") || d.contains("i") || d.contains("o") || d.contains("u"))) 
      { 
      System.out.print(answer4 + d + "ay"); 
      } 
     else if (!(c.contains("a") || c.contains("e") || c.contains("i") || c.contains("o") || c.contains("u"))) 
      { 
      System.out.print(answer3 + c + "ay"); 
      } 
     else if (!(b.contains("a") || b.contains("e") || b.contains("i") || b.contains("o") || b.contains("u"))) 
      { 
      System.out.print(answer + b + "ay"); 
      } 
     else if (!(a.contains("a") || a.contains("e") || a.contains("i") || a.contains("o") || a.contains("u"))) 
     { 
     System.out.print(answer2 + a + "ay"); 
     } 
     } 
    } 
    } 

답변

0

하나 개 이상의 공백 문자의 각 발생에

String[] words = str.split("\\s+"); 

.split("\\s+") 분할을 str를 사용할 수 있습니다.

독자적인 방법으로 한 단어를 처리하는 코드를 리팩터링하고 words의 모든 요소에 적용하는 것이 좋습니다.

+0

나는 이것이 작동해야한다고 생각하지만, String words를 만들 때 일어날 일은 무엇인가? 또한 나는 단어를 출력했고 다음과 같이 이것을 주었다 : [Ljava.lang.String; @ 1f86e79 – Gihadi

+0

@Gihadi'import java.util.Arrays'와'Arrays.toString (words)'(배열은'toString ()'메소드를 사용하는 것이므로,이 유틸리티 메소드를 사용해야한다. – arshajii

0

공간을 통해 문자열을 분리하는 것은 매우 간단합니다. 당신은 이미 System.In 주위에 스캐너를 감싸는 방법을 알고 있습니다. 만약 당신이 String 주위에 스캐너를 감싸는다면, 기본 토큰 구분자는 공백입니다.

String test = "Hello world, my name is bob."; 
Scanner sc = new Scanner(test); 
while (sc.hasNext()) 
    System.out.println(sc.next()); 

이 코드 블록의 출력은 당신이 개별적으로 입력 및 돼지 - 라틴 어법을 사용하다 각 단어를 따로 휴식이 논리를 통합 할 수 있습니다

Hello 
world, 
my 
name 
is 
bob. 

될 것입니다.

+0

또한 arshajii의 대답을 배우십시오. 새 스캐너의 오버 헤드를 사용하지 않고 간단하게 수행 할 수 있습니다. 고양이를 두껍게하는 두 가지 방법은 좀 더 우아합니다. –

0

JavaCC을 시도하고 싶을 수도 있지만 실제로는 복잡한 구문 분석 상황에서 더 많이 사용됩니다. 원하는대로 String.split 메서드를 사용하는 것이 더 쉽습니다.

+0

arshajii는 String.split을 사용하는 예제를 제공합니다. – pinmonkeyiii

관련 문제