我正在嘗試從長度為奇數的字串 =“一二三四”中反轉單詞,我正在使用StringBuilder類來反轉單詞我的預期輸出是“enO owT eerht 四”,但我得到“eerht enO 二四”這里的順序不正確,也沒有顛倒“二”,我的代碼有什么問題也請提供解決方案。
package QAIntvSprint;
import java.util.Arrays;
public class SecretAgent {
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) {
secretAgentII("One Two three Four");
}
static void secretAgentII(String s) {
String[] arr = s.split(" ");
System.out.println(Arrays.toString(arr));
int i;
for (i = 0; i < arr.length; i ) {
if (arr[i].length() % 2 == 0) {
sb.append(arr[i] " ");
} else {
sb.append(arr[i]).reverse().append(" ");
}
}
System.out.println(sb.toString());
}
}
輸出低于

uj5u.com熱心網友回復:
您的問題是您將字串添加到同一實體中StringBuilder并將其作為一個整體反轉。關鍵是創建一個臨時緩沖區來反轉字串,一旦反轉,將臨時緩沖區的內容附加到sb緩沖區。
要修復,請將else塊的內容替換為以下代碼段:
StringBuilder temp = new StringBuilder(arr[i]).reverse();
sb.append(temp.toString()).append(" ");
該程式現在輸出
[One, Two, three, Four]
enO owT eerht Four
uj5u.com熱心網友回復:
我會在這里使用流方法:
String input = "One Two three Four";
String output = Arrays.stream(input.split(" "))
.map(x -> new StringBuilder(x).reverse().toString())
.collect(Collectors.joining(" "));
System.out.println(output); // enO owT eerht ruoF
uj5u.com熱心網友回復:
你可以Pattern這樣使用。
static final Pattern WORD = Pattern.compile("\\S ");
static String secretAgentII(String s) {
return WORD.matcher(s)
.replaceAll(m -> m.group().length() % 2 == 0
? m.group()
: new StringBuilder(m.group()).reverse().toString());
}
public static void main(String[] args) {
System.out.println(secretAgentII("One Two three Four"));
}
輸出:
enO owT eerht Four
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/523801.html
