我只想重復輸入字串中的單詞。但是輸出的順序不對。這是我的代碼:
public static String repeatWords(String s, int num){
StringBuilder sb = new StringBuilder();
StringBuilder sbtemporary = new StringBuilder();
int leng = s.length();
for (int i=0; i < leng; i ){
char c = s.charAt(i);
int b = (int) c;
if (b >= 65 && b <= 90 || b >= 97 && b <= 122){
sbtemporary.append(c);
} else if (b == 32){
sbtemporary.append(" ");
}
if (b == 32){
for (int j = 1; j<= num-1; j ){
sb = sb.append(" " sbtemporary);
sbtemporary.delete(0,sbtemporary.length());
}
}
sb.append(c);
}
String str = sb.toString();
return str;
}
s 是輸入字串,num 是需要重復的次數。我想要的結果是:
When the input is : "How are you? I am fine."
The output should be like: "How How are are you you?"
但我的代碼的結果是:
"How How are are you? you I I am am fine."
我真的不知道哪里出了問題,有人可以幫助我嗎?
uj5u.com熱心網友回復:
System.out.println((int) "?".charAt(0)); //63
System.out.println((int) ".".charAt(0)); //46
“?” 和 ”。” 不要附加到 sbtemporary。
uj5u.com熱心網友回復:
更正的代碼:-
public static String repeatWords(String s, int num){
StringBuilder sb = new StringBuilder();
StringBuilder sbtemporary = new StringBuilder();
int leng = s.length();
for (int i=0; i < leng; i ){
char c = s.charAt(i);
int b = (int) c;
if (b >= 65 && b <= 90 || b >= 97 && b <= 122){
sbtemporary.append(c);
}
if (b == 32 && sbtemporary.length() != 0){
for (int j = 1; j<= num-1; j ){
sb.append(" " sbtemporary);
}
sbtemporary.delete(0,sbtemporary.length());
}
sb.append(c);
}
String str = sb.toString();
return str;
}
變化:-
- 洗掉了將空間附加到 sbtemporary 的 else if (b == 32) 部分。
- 洗掉 j 回圈之外的 sbtemporary 內容,否則它僅適用于 num == 2。
- 在 if 條件 b == 32 中,如果 sbtemporary 不為空,則再添加一個條件。
uj5u.com熱心網友回復:
添加此檢查,并將重復部分添加到 sbtemporary。
System.out.println(repeatWords(str, 1));
if ( b == 63) {
sb = sb.append(" " sbtemporary);
sb.append(c);
break;
}
if (b == 63) {
for (int j = 1; j<= num; j ){
sb.append(" " sbtemporary);
}
sb.append(c);
break;
}
public static String repeatWords(String s, int num) {
StringBuilder sb = new StringBuilder();
StringBuilder sbtemporary = new StringBuilder();
int leng = s.length();
for (int i = 0; i < leng; i ) {
char c = s.charAt(i);
int b = (int) c;
if (b == 63) {
for (int j = 1; j<= num; j ){
sb.append(" " sbtemporary);
}
sb.append(c);
break;
}
if (b >= 65 && b <= 90 || b >= 97 && b <= 122) {
sbtemporary.append(c);
}
if (b == 32 && sbtemporary.length() != 0){
for (int j = 1; j<= num; j ){
sb.append(" " sbtemporary);
}
sbtemporary.delete(0,sbtemporary.length());
}
sb.append(c);
}
String str = sb.toString();
return str;
}
uj5u.com熱心網友回復:
你可以簡單地這樣做,
String content = "How are you? I am fine.";
String[] words = content.split("\\s"); // `\\s` preserves any 2 or more repeated spaces
StringBuilder builder = new StringBuilder();
for(String word : words) {
for(int i = 0; i < n; i ) { // n is the no. of times to repeat the word
builder.append(word).append(" ");
}
}
System.out.printf("Repeated String : %s", builder.toString().trim());
Java8 的一種更整潔的方式,這里 Collections.nCopies(n, word)簡單地回傳一個單詞重復n次數的串列,將其轉換為一個String由空格分隔的單個字串,最終,所有這些重復的字串都轉換為一個由空格分隔的最終結果字串。
String content = "How are you? I am fine.";
String[] words = content.split("\\s");
String result = Arrays.stream(words)
.map(word -> String.join(" ", Collections.nCopies(n, word)))
.collect(Collectors.joining(" ")); //n is the no. of times to repeat the word
System.out.printf("Repeated String : %s", result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/322000.html
