Java 中计数器的一系列字符串操作
A series of String Manipulation Operations with counter in Java
问题:
下面的字符串包含多个单词,每个单词由井号 (#) 分隔。
每个单词按#分割后,
- 反转单词中的每个字符。
- 为每个单词启动计数器表格 1。
- 找到字符 a、e、i、o、u,如果找到该字符,则用计数器值替换它并递增到 1。
- 为每个单词重置计数器。
- 打印最后的字符串。
打印最后的字符串。
示例:
输入:我的#name#is#manan
输出:ym 1m2n s1 n1n2m
我的密码是:
import java.lang.*;
import java.io.*;
import java.util.*;
class StrSplit {
public static void main(String[] args) {
String sentence = "my#name#is#manan";
String[] word = sentence.split("#");
String[] reverseword = new String[word.length];
for (int i = 0; i < word.length; i++) {
StringBuilder revword = new StringBuilder(word[i]); // METHOD FOR USING .reverse()
revword.reverse(); // REVERSING
reverseword[i] = revword.toString(); // SAVING REVERSED WORDS INTO AN ARRAY.
}
for (int i = 0; i < reverseword.length; i++) {
int counter = 1;
String current = reverseword[i]; //SELECTING A WORD
for (int j = 0; j < current.length(); j++) {
char ch = current.charAt(j); //SELECTING A CHARACTER
char count=(char)(counter+ '0'); //VOWEL COUNTER
if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') {
current = current.replace(current.charAt(j),count); //REPLACE VOWEL WITH NUMBER
counter++;
}
}
counter=1;
StringBuilder output= new StringBuilder(current);
output.append(' ');
System.out.print(output);
}
}
}
但是我的输出有一个错误。我的输出是:
ym 1m2n s1 n1n1m
本来应该是:
ym 1m2n s1 n1n2m
问题是,如果元音不相同,计数器只会递增。
current.replace(current.charAt(j),count)
替换所有出现的 current.charAt(j)
,因此如果同一个元音出现多次,您可以在一次调用中替换所有出现的位置,并且只增加计数器一次。
如果您更改
,您可以只替换第一个出现的地方
current = current.replace(current.charAt(j),count);
到
current = current.replaceFirst(current.substring(j,j+1),Integer.toString(counter));
这样计数器会为每个被替换的字符递增一次。
现在输出是:
ym 1m2n s1 n1n2m
请注意 replaceFirst()
需要 String
个参数,而不是 char
。
将reverseword
设为StringBuilder
的数组并使用classjava.lang.StringBuilder
的方法replace。您还可以使用更少的变量和更少的操作。
String sentence = "my#name#is#manan";
String[] word = sentence.split("#");
StringBuilder[] reverseword = new StringBuilder[word.length];
for (int i = 0; i < word.length; i++) {
reverseword[i] = new StringBuilder(word[i]); // METHOD FOR USING .reverse()
reverseword[i].reverse(); // REVERSING
}
for (int i = 0; i < reverseword.length; i++) {
int counter = 1;
for (int j = 0; j < reverseword[i].length(); j++) {
char ch = reverseword[i].charAt(j); // SELECTING A CHARACTER
String count = String.valueOf(counter); // VOWEL COUNTER
if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') {
reverseword[i].replace(j, j + 1, count); // REPLACE VOWEL WITH NUMBER
counter++;
}
}
// counter = 1; <- not required
StringBuilder output = new StringBuilder(reverseword[i]);
output.append(' ');
System.out.print(output);
}
运行 以上代码产生以下输出:
ym 1m2n s1 n1n2m
问题:
下面的字符串包含多个单词,每个单词由井号 (#) 分隔。 每个单词按#分割后,
- 反转单词中的每个字符。
- 为每个单词启动计数器表格 1。
- 找到字符 a、e、i、o、u,如果找到该字符,则用计数器值替换它并递增到 1。
- 为每个单词重置计数器。
- 打印最后的字符串。 打印最后的字符串。 示例:
输入:我的#name#is#manan 输出:ym 1m2n s1 n1n2m
我的密码是:
import java.lang.*;
import java.io.*;
import java.util.*;
class StrSplit {
public static void main(String[] args) {
String sentence = "my#name#is#manan";
String[] word = sentence.split("#");
String[] reverseword = new String[word.length];
for (int i = 0; i < word.length; i++) {
StringBuilder revword = new StringBuilder(word[i]); // METHOD FOR USING .reverse()
revword.reverse(); // REVERSING
reverseword[i] = revword.toString(); // SAVING REVERSED WORDS INTO AN ARRAY.
}
for (int i = 0; i < reverseword.length; i++) {
int counter = 1;
String current = reverseword[i]; //SELECTING A WORD
for (int j = 0; j < current.length(); j++) {
char ch = current.charAt(j); //SELECTING A CHARACTER
char count=(char)(counter+ '0'); //VOWEL COUNTER
if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') {
current = current.replace(current.charAt(j),count); //REPLACE VOWEL WITH NUMBER
counter++;
}
}
counter=1;
StringBuilder output= new StringBuilder(current);
output.append(' ');
System.out.print(output);
}
}
}
但是我的输出有一个错误。我的输出是:
ym 1m2n s1 n1n1m
本来应该是:
ym 1m2n s1 n1n2m
问题是,如果元音不相同,计数器只会递增。
current.replace(current.charAt(j),count)
替换所有出现的 current.charAt(j)
,因此如果同一个元音出现多次,您可以在一次调用中替换所有出现的位置,并且只增加计数器一次。
如果您更改
,您可以只替换第一个出现的地方current = current.replace(current.charAt(j),count);
到
current = current.replaceFirst(current.substring(j,j+1),Integer.toString(counter));
这样计数器会为每个被替换的字符递增一次。
现在输出是:
ym 1m2n s1 n1n2m
请注意 replaceFirst()
需要 String
个参数,而不是 char
。
将reverseword
设为StringBuilder
的数组并使用classjava.lang.StringBuilder
的方法replace。您还可以使用更少的变量和更少的操作。
String sentence = "my#name#is#manan";
String[] word = sentence.split("#");
StringBuilder[] reverseword = new StringBuilder[word.length];
for (int i = 0; i < word.length; i++) {
reverseword[i] = new StringBuilder(word[i]); // METHOD FOR USING .reverse()
reverseword[i].reverse(); // REVERSING
}
for (int i = 0; i < reverseword.length; i++) {
int counter = 1;
for (int j = 0; j < reverseword[i].length(); j++) {
char ch = reverseword[i].charAt(j); // SELECTING A CHARACTER
String count = String.valueOf(counter); // VOWEL COUNTER
if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') {
reverseword[i].replace(j, j + 1, count); // REPLACE VOWEL WITH NUMBER
counter++;
}
}
// counter = 1; <- not required
StringBuilder output = new StringBuilder(reverseword[i]);
output.append(' ');
System.out.print(output);
}
运行 以上代码产生以下输出:
ym 1m2n s1 n1n2m