如果给出一个像“去医生!”的字符串。例如,如何仅替换偶数字符?问题在于,当我的代码处理第一个单词时,单词之间的空格被视为一个字符本身,并且在第二个单词中将第二个单词的第一个字母变为偶数,从而弄乱了替换。
这是我的尝试
public static void main(String[] args) {
String s = "go to med!";
String alphabetS = "abcdefghijklmnopqrstuvwxyz";
StringBuilder sb = new StringBuilder(s);
for(int i=0; i<s.length(); i++){
char currChar = s.charAt(i);
int idx = alphabetS.indexOf(currChar);
if (idx != -1)
if (i%2==1)
{
sb.setCharAt(i, '*');
}
}
System.out.println(sb);
}
这给出了输出“g + + o m + d!” (第二个字母正确地被+替换为偶数,但第二个字母的第一个字母不应该被替换为“第一个”不是“偶数”。 如何使索引忽略空格?
答案最好不要包含数组,只包含Char和String方法。
答案 0 :(得分:1)
您可以简单地拆分空间上的输入并单独处理每项工作。然后,您可以使用StringJoiner
拼凑结果,例如......
String s = "go to med!!";
String alphabetS = "abcdefghijklmnopqrstuvwxyz";
String[] words = s.split(" ");
StringJoiner sj = new StringJoiner(" ");
for (String word : words) {
StringBuilder sb = new StringBuilder(word);
for (int i = 0; i < sb.length(); i++) {
char currChar = sb.charAt(i);
int idx = alphabetS.indexOf(currChar);
if (idx != -1) {
if (i % 2 == 1) {
sb.setCharAt(i, '*');
}
}
}
sj.add(sb.toString());
}
System.out.println(sj.toString());
输出
g* t* m*d!!
这可以在不使用数组的情况下完成 - 只需使用char和string方法吗?
您需要一个单独的计数器,而不是依赖于i
,该计数器会跟踪您可以使用哪个点以及哪些点可用于忽略无效字符,例如
String s = "go to med!!";
String alphabetS = "abcdefghijklmnopqrstuvwxyz";
StringBuilder sb = new StringBuilder(s);
int counter = 0;
for (int i = 0; i < sb.length(); i++) {
char currChar = sb.charAt(i);
int idx = alphabetS.indexOf(currChar);
if (idx != -1) {
if (counter % 2 == 1) {
System.out.println("!!");
sb.setCharAt(i, '*');
}
counter++;
}
}
System.out.println(sb.toString());
仍然输出
g* t* m*d!!
答案 1 :(得分:1)
这给出了g* t* m*d*
public static void main(String[] args) {
String s = "go to med!";
int realindex=0;
StringBuilder sb = new StringBuilder();
for(int i=0; i<s.length(); i++){
char currChar = s.charAt(i);
if ((currChar != ' '))
{
if (realindex%2==1) {
currChar = '*';
}
realindex++;
}
sb.append(currChar);
}
System.out.println(sb.toString());
}
答案 2 :(得分:1)
有一千种不同的方法可以实现您的目标,但假设您想继续使用您的解决方案,这就是您可以做的事情
public static void main(String[] args) {
String s = "go to med!! goodbye cruel world";
String alphabetS = "abcdefghijklmnopqrstuvwxyz";
StringBuilder sb = new StringBuilder(s);
for (int i = 0,relativePosition=0; i < s.length(); i++,relativePosition++) {
char currChar = s.charAt(i);
if(currChar == ' '){relativePosition=-1;continue;}
int idx = alphabetS.indexOf(currChar);
if (idx != -1)
if (relativePosition % 2 == 1)
sb.setCharAt(i, '*');
}
System.out.println(sb);
}
打印
g* t* m*d!! g*o*b*e c*u*l w*r*d
答案 3 :(得分:0)
关于甚至字母状态介绍旗帜怎么样?
boolean isEven=false;
for(int i=0; i<s.length(); i++){
char currChar = s.charAt(i);
int idx = alphabetS.indexOf(currChar);
if (idx != -1)
if(isEven){
isEven=false;
sb.setCharAt(i, '*');
}else {
isEven = true;
}
}
}