2017-04-22 66 views
0

這結尾的詞是我的教授分配的分配:使用堆棧來翻轉句子的單詞。繼續閱讀文字,並將它們添加到堆棧,直到你有,在一個時期

使用堆棧扭轉一個句子的單詞。繼續閱讀文字,並將它們添加到堆棧中,直到有一個詞在一段時間內結束。發生這種情況時,請將文字從堆疊中彈出並打印出來。例如,對於輸入「這是一場內戰時期」。你應該輸出「戰爭時期的民間是它」。注意大小寫和標點符號的變化。

我到目前爲止的程序顛倒了單詞的順序,但我不知道如何在期間停止它,更改大小寫,並移動標點符號。我怎麼做?

import java.util.Scanner; 
import java.util.Stack; 
import java.util.regex.Pattern; 

public class ReverseWordsInString 
{ 
    //main method 
    public static void main(String[] args) 
    { 
    Scanner scanner = new Scanner(System.in); 
    System.out.printf("1. Enter string to reverse : "); 
    String inputString = scanner.nextLine(); 

    if (inputString == null || inputString.length() == 0) 
    { 
     System.out.println("Enter the valid string"); 
     return; 
    } 
    String reverse = reverseStringWordWise_Stack(inputString); 
    System.out.printf("\n3. Reverse string using stack is : %s", reverse); 
    } 
    //reverses the string using a stack 
    private static String reverseStringWordWise_Stack(String inputString) 
    { 
    String[] arrString = inputString.trim().split(Pattern.quote(" ")); 
    Stack stack = new Stack(); 
    for(String input : arrString) 
    { 
     stack.push(input); 
    } 
    StringBuilder builder = new StringBuilder(); 
    while(!stack.isEmpty()) 
    { 
     builder.append(stack.pop()).append(" "); 
    } 
    return builder.toString(); 
    } 
} 

回答

0

其實,你可以在這樣的方式處理案件:

for(int i = 0; i < arrString.length; i++) { 
    // first one to lower case 
    if (i == 0) { 
     String str = arrString[i].substring(0, 1).toLowerCase() + arrString[i].substring(1); 
     stack.push(str); 
    } 
    // last one to Upper case and trim period 
    else if (i == arrString.length - 1) { 
     String str = arrString[i].substring(0, 1).toUpperCase() + arrString[i].substring(1); 
     // trim period 
     str = str.substring(0, str.length - 1); 
     stack.push(str); 
    } else { 
     stack.push(arrString[i]); 
    } 
} 
0

你需要做以下修改:如果令牌有結束

  1. 退出循環的在將其推入stack之前的期間字符和去除期字符,例如:

    for(String input : arrString) { if(input.endsWith("."){ stack.push(input.toLowerCase().substring(0, input.length() - 1)); break; }else{ stack.push(input); } }

  2. Decapitalise的最後一個字,同時從堆棧彈出:

    while(!stack.isEmpty()) { if(stack.size() == 1){ String element = stack.pop().toString(); builder.append(element.substring(0, 1).toLowerCase() + element.substring(1)).append(" "); }else{ builder.append(stack.pop()).append(" "); } }

  3. 大寫所得串的首字母和追加期:

    builder.append("."); String result = builder.toString(); return result.substring(0, 1).toUpperCase() + result.substring(1);

+0

對於步驟2上該行「String element = stack.pop();」我不斷收到類型不匹配錯誤。請幫助 – Hogwartsishome

+0

@Hogwartsishome將其更改爲'stack.pop()。toString()',我已經更新了答案。 –

相關問題