如何用Java中的空格替换字符串中的奇数/偶数字符?

时间:2015-12-08 22:49:07

标签: java string char

如果给出一个像“去医生!”的字符串。例如,如何仅替换偶数字符?问题在于,当我的代码处理第一个单词时,单词之间的空格被视为一个字符本身,并且在第二个单词中将第二个单词的第一个字母变为偶数,从而弄乱了替换。

这是我的尝试

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方法。

4 个答案:

答案 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;
        }
    }
}