交换字符串中的单词

Swap the word in the String

input:-
1
Ans kot

Output:-
kot Ans

输入: 输入的第一行包含测试用例的数量。每个测试用例由包含字符串的一行组成。

输出: 输出如上所述交换单词的字符串。**

代码:-

Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
StringBuffer result = new StringBuffer();
for (int i = 0; i < a; i++) {
    String b = sc.next();
    String my[] = b.split(" ");
    StringBuffer r = new StringBuffer();
    for (int j = my.length - 1; j > 0; j--) {
        r.append(my[j] + " ");
    }
    r.append(my[0] + "\n");
    result.append(r.toString());
}
System.out.println(result.toString());
}

我的代码有什么问题?以上是我正在尝试的代码。

接受 String 输入和 return String 每个字符的倒序。

String reverse(String x) {
        int i = x.length() - 1;
        StringBuilder y = new StringBuilder();
        while (i >= 0) {
            y.append(x.charAt(i));
            i--;
        }

        return y.toString();
    }
String my[] = b.split(" ");
StringBuffer r = new StringBuffer();
for (int j = my.length - 1; j > 0; j--) {
    r.append(my[j] + " ");
}

您的这段代码只会反转句子 "word by word" 而不是 "character by character"。因此,您需要先反转字符串 (my[j]),然后再将其附加到 StringBuffer

使用这个

 Scanner sc = new Scanner(System.in);
            int a = sc.nextInt();
            sc.nextLine();
            StringBuffer result = new StringBuffer();
            for (int i = 0; i < a; i++) {
                String b = sc.nextLine();
                String my[] = b.split(" ");
                StringBuffer r = new StringBuffer();
                for (int j = my.length - 1; j > 0; j--) {
                    r.append(my[j] + " ");

                }
                r.append(my[0] + "\n");
                result.append(r.toString());
            }
            System.out.println(result.toString());
        }
public static String reverseWords(String input) {
    Deque<String> words = new ArrayDeque<>();
    for (String word: input.split(" ")) {
        if (!word.isEmpty()) {
            words.addFirst(word);
        }
    }
    StringBuilder result = new StringBuilder();
    while (!words.isEmpty()) {
        result.append(words.removeFirst());
        if (!words.isEmpty()) {
            result.append(" ");
        }
    }
    return result.toString();
}

您可以运行此代码:

String[] splitted = yourString.split(" ");

for (int i = splitted.length-1; i>=0; i--){
    System.out.println(splitted[i]);
} 

多项:

  1. 您正在使用 next api 它将只读取您逐字键入的字符串,然后循环直到 a 即在您的示例中只读一次。因此,请改用 nextLine api ,它将读取整行而不是一个单词,然后按 space:

    拆分
    String b = sc.nextLine();
    
  2. 您正在使用 nextInt api 读取输入,然后输入,您有时可能会在使用 [=12 读取下一个标记时最终得到 return 字符=] api。而是使用:

    int a = Integer.parseInt(sc.nextLine());
    
  3. 您正在使用 StringBuffer,它有获取互斥锁的开销,因此应该使用 StringBuilder。

Code:-
               
    Scanner sc =new Scanner(System.in);
        int a =Integer.parseInt(sc.nextLine());
        StringBuffer result= new StringBuffer();
        for (int i = 0; i <a; i++) {
     String b=sc.nextLine();
        String my[]= b.split(" ");
        StringBuffer r = new StringBuffer();
     for (int j = my.length-1; j >0; j--) {
      r.append(my[j]+" ");
      
     }
     r.append(my[0] + "\n");
          result.append(r.toString());
    }
     System.out.println(result.toString());
   

enter code here