2011-10-24 5 views
1

이것은 우리의 코드입니다. 우리는 그들을 역순으로 인쇄하고 싶습니다. 그래서 한 줄이면 : 예, 4 초콜렛 우유. 우리는 인쇄하고 싶습니다 : 밀크 초콜릿 4 예.자바 문자열의 반전 단어

우리 코드는 역순으로 단어를 인쇄하므로 yes가 sey가됩니다. 우리는 그것이 그렇게되기를 원하지 않지만 그것을 어떻게 바꿀 것인지 모른다. 우리는 스택을 만드는 것에 대해 생각해 왔지만 패턴 및 매처와 함께 작동하는 방식은 아닙니다.

+0

인가? 그렇다면 태그를 붙이십시오. –

+0

나는 모든 단어를 스플릿 ("")으로 파싱 할 것이다. 해시 맵에 넣고 역순으로 사용하십시오. 내 생각에, 그것은 텍스트를 뒤집는 가장 빠른 방법 일 것입니다. – Racooon

+2

출력 예제에서 "초콜릿 초유 4 예"가 아닌 "우유 초코 4 예"가 아닌 이유는 무엇입니까? 그건 신중한가요? 그렇다면 알고리즘이 알고리즘을 어떻게 인식해야합니까? – amit

답변

4

읽은 줄을 바꾸지 말고 줄을 모음으로 나눠서 역순으로 사용하지 마십시오. 당신은 당신이 얻을 수 있도록 문자를 반대로하면됩니다 무엇 :

Yes, 4 Chocolate milk -> klim etalocohC 4 , seY 

당신이 그 배열/목록을 되돌릴 수 ["Yes","4","Chocolate milk"]에 선을 분할합니다.

문제는 다음과 같습니다. Chocolate milk을이 순서로 유지하려는 것입니다. 따라서 함께 속하는 단어를 정의해야합니다. 입력이 항상 <words>, <number> <words> 인 경우 먼저 ,으로 분할하여 첫 번째 <words>을 분리 한 다음 나머지 부분의 첫 번째 공백을 두어 숫자와 두 번째 숫자를 분리합니다. <words>.

업데이트이 시도가 :

String input = "Yes sir, 4 Chocolate milk"; 

//Pattern is: 
//- one or more words separated by whitespace as group 1: ((?:\\w+\\s*)+) 
//- a comma 
//- optional whitespace: \\s* 
//- an integer number as group 2: (\\d+) 
//- optional whitespace \\s* 
//- an arbitrary rest (which might contain anything) as group 3: (.*) 
Pattern p = Pattern.compile("((?:\\w+\\s*)+),\\s*(\\d+)\\s*(.*)"); 
Matcher m = p.matcher(input); 

List<String> list = new ArrayList<String>(); 
while(m.find()) { 
    list.add(m.group(1)); 
    list.add(m.group(2)); 
    list.add(m.group(3)); 
} 

Collections.reverse(list); 
for(String s : list) { 
    System.out.println(s); 
} 

출력이 당신의 입력의 레이아웃에 따라 단지 시작을 제공하기위한 것이

Chocolate milk 
4 
Yes sir 

주의해야한다. 또한 다른 패턴 일치 로직과 통합해야합니다.

1

Scanner 또는 간단히 String.split()을 사용하여 줄에 모든 토큰의 Array 또는 Collection을 만드십시오. 그런 다음 for -loop을 사용하여 뒤로 반복하여 선을 다시 만듭니다. 또한 이것을 달성하기 위해 Collections.reverse()을 사용할 수 있습니다.

0

문자열을 단어 단위로 분할하고 결과를 문자열 배열에 저장 한 다음 마지막 요소부터 첫 번째 요소까지의 문자열을 표시합니다. 코드 :

public static void main(String[] args) { 
    String hello = "bananas 45 guns me likes 3"; 
    String[] reverse_me = hello.split(" "); 

    // the -1 is because the index starts in zero :-0) 
    for(int i = reverse_me.length-1; i >= 0 ; i--){ 
     System.out.println(reverse_me[i]); 
    } 

} 

출력이 숙제

3 
likes 
me 
guns 
45 
bananas