这是我的教授分配的任务:
使用堆栈扭转句子的单词。继续阅读单词并将它们添加到堆栈中,直到您有一个时期结束的单词。发生这种情况时,将单词从堆栈中弹出并打印出来。例如,对于"这是内战时期"的意见。您应该输出"战争时期战争"。注意大写和标点符号变化。
我到目前为止的程序扭转了单词的顺序,但是我不知道该如何在此期间停止,更改大写字母并移动标点符号。我该怎么做?
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]);
}
}
您需要进行以下更改:
-
如果代币以一个时期的聊天仪结束并剥离循环,然后将其推入
stack
,例如:for(String input : arrString) { if(input.endsWith("."){ stack.push(input.toLowerCase().substring(0, input.length() - 1)); break; }else{ stack.push(input); } }
-
从堆栈中弹出时的最后一个单词:
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(" "); } }
-
资本化结果字符串和附加周期的首字母:
builder.append("."); String result = builder.toString(); return result.substring(0, 1).toUpperCase() + result.substring(1);