使用堆栈扭转句子的单词.继续阅读单词并将它们添加到堆栈中,直到您有一个时期结束的单词



这是我的教授分配的任务:

使用堆栈扭转句子的单词。继续阅读单词并将它们添加到堆栈中,直到您有一个时期结束的单词。发生这种情况时,将单词从堆栈中弹出并打印出来。例如,对于"这是内战时期"的意见。您应该输出"战争时期战争"。注意大写和标点符号变化。

我到目前为止的程序扭转了单词的顺序,但是我不知道该如何在此期间停止,更改大写字母并移动标点符号。我该怎么做?

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();
  }
}

实际上,您可以以这种方式处理案例:

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]);
    }
}

您需要进行以下更改:

  1. 如果代币以一个时期的聊天仪结束并剥离循环,然后将其推入stack,例如:

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

  2. 从堆栈中弹出时的最后一个单词:

    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);

最新更新