将字符串中的每个单词颠倒顺序,并将单词开头字母大写。

4

示例输入:

abc def ghi

示例输出:

Cba Fed Ihg

这是我的代码:
import java.util.Stack;

public class StringRev {
    static String output1 = new String();
    static Stack<Character> stack = new Stack<Character>();
    public static void ReverseString(String input) {
        input = input + " ";
        for (int i = 0; i < input.length(); i++) {
            boolean cap = true;
            if (input.charAt(i) == ' ') {
                while (!stack.isEmpty()) {
                    if (cap) {
                        char c = stack.pop().charValue();
                        c = Character.toUpperCase(c);
                        output1 = output1 + c;
                        cap = false;
                    } else
                        output1 = output1 + stack.pop().charValue();
                }
                output1 += " ";
            } else {
                stack.push(input.charAt(i));
            }
        }
        System.out.print(output1);
    }
}

有更好的解决方案吗?

我认为这个问题属于http://codereview.stackexchange.com/。 - SpringLearner
@java初学者 我应该在那里问还是可以将它移动到codeReview。此外,这是否是一个好的实现? - rtindru
1
不要使用String来连接结果。使用StringBuilder来追加结果值。因为String是不可变的。删除String变量output1并在reverseMethod中创建一个StringBuilder。 - newuser
6个回答

5

利用

IT 技术

StringBuilder#reverse()

然后在不添加任何第三方库的情况下,

    String originalString = "abc def ghi";
    StringBuilder resultBuilder = new StringBuilder();
    for (String string : originalString.split(" ")) {
        String revStr = new StringBuilder(string).reverse().toString();
        revStr = Character.toUpperCase(revStr.charAt(0))
                + revStr.substring(1);
        resultBuilder.append(revStr).append(" ");
    }
    System.out.println(resultBuilder.toString());  //Cba Fed Ihg 

Have a Demo


标准输入(stdin)是3行输入,例如:input = "2", "dog", "Cat",并且需要标准输出(stdout),output = "God", "TaC"。如何使用Scanner?我需要使用列表吗?非常感谢! - B-Y

2
您可以使用 StringBufferreverse()字符串。
然后使用 WordUtils#capitalize(String) 方法将字符串的第一个字母大写。
String str = "abc def ghi";
StringBuilder sb = new StringBuilder();
for (String s : str.split(" ")) {
    String revStr = new StringBuffer(s).reverse().toString();
    sb.append(WordUtils.capitalize(revStr)).append(" ");
}
String strReversed = sb.toString();

1

编辑

首先将字符串反转,然后将第一个字符大写。

String string="hello jump";
StringTokenizer str = new StringTokenizer(string," ") ;
String finalString ;

while (str.hasMoreTokens()) {
   String input = str.nextToken() ;
   String reverse = new StringBuffer(input).reverse().toString();
   System.out.println(reverse);

   String output = reverse .substring(0, 1).toUpperCase() + reverse .substring(1);
   finalString=finalString+" "+output ;
}

System.out.println(finalString);

我认为你没有完全遵循。它不应该将abc转换为Cba,而是应该将abc def转换为Cba Fed - rtindru
然后,您可以对整个单词进行“标记化”,并将上述逻辑应用于每个标记。 - Arun
如果我的答案对您有用且符合您的要求,请将其标记为正确答案。 - Arun

1
public static String reverseString(final String input){
    if(null == input || isEmpty(input))
        return "";

    String result = "";
    String[] items = input.split(" ");

    for(int i = 0; i < items.length; i++){
        result += new StringBuffer(items[i]).reverse().toString();
    }

    return result.substring(0,1).toupperCase() + result.substring(1);
}

1

1)使用此代码将字符串反转

StringBuffer a = new StringBuffer("Java");
a.reverse();

2) 要将首字母大写,请使用Apache Commons Lang包org.apache.commons.lang.StringUtils中的StringUtils类。

它可以使第一个字母大写。

capitalise(String);

希望它有所帮助。

0
import java.util.*;
public class CapatiliseAndReverse {
    public static void reverseCharacter(String input) {
        String result = "";
        StringBuilder revString = null;

        String split[] = input.split(" ");

        for (int i = 0; i < split.length; i++) {
            revString = new StringBuilder(split[i]);
            revString = revString.reverse();

            for (int index = 0; index < revString.length(); index++) {

                char c = revString.charAt(index);
                if (Character.isLowerCase(revString.charAt(0))) {
                    revString.setCharAt(0, Character.toUpperCase(c));
                }

                if (Character.isUpperCase(c)) {
                    revString.setCharAt(index, Character.toLowerCase(c));
                }
            }

            result = result + " " + revString;
        }

        System.out.println(result.trim());
    }

    public static void main(String[] args) {
        //System.out.println(reverseCharacter("old is GlOd"));
        Scanner sc = new Scanner(System.in);
        reverseCharacter(sc.nextLine());
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接