当前位置: 首页 > 知识库问答 >
问题:

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

施飞雨
2023-03-14

如果给一个字符串,比如“去医学院!”例如,如何仅替换偶数字符?问题是,虽然我的代码处理第一个单词,但单词之间的空格本身算作一个字符,并将第二个单词中的替换搞乱,第二个单词的第一个字母被归类为偶数。

这是我的尝试

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);

}

这将给出输出“gomd!”(第二个字母正确替换为表示偶数,但第二个单词的第一个字母不应替换为“第一个”不是“偶数”。如何使索引忽略空格?

答案最好不包含数组,只包含Char和String方法

共有3个答案

倪灿
2023-03-14

有一千种不同的方法来实现你的目标,但是假设你想继续使用你的解决方案,下面是你可以做的

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
红智鑫
2023-03-14

这将给出: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());
}
施洛城
2023-03-14

您可以简单地分割空间上的输入并单独处理每个工作。然后可以使用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!!
 类似资料:
  • 问题内容: 如何在Java中用空字符串替换单引号’。我尝试了以下操作,但似乎没有用。 提前致谢。非常感谢您的帮助。(输出应为:Sids den) 谢谢你们的回应。我想我应该对我的问题更加清楚。基本上,我从表中获得特殊字符,并且从同一个表中我们必须用什么值替换那些特殊字符。这是代码片段: 因此,当数据中的evrf有特殊字符’时,我将面临nullpointer异常。请建议如何进行此操作? 问题答案:

  • 问题内容: 我有一个包含多个空格的字符串。我想用加号代替它们。我以为我可以用 但它只会替换第一次出现的情况。如何获得它来代替所有出现的情况? 问题答案: 这是不需要正则表达式的替代方法:

  • js如何替换字符串中的中文空格? 我尝试使用了下面几个方法都不行 str.replace(/[\u3000]/g, ' ')

  • 我正在从DB获取空值,但我需要显示空字符串。 例如,我必须附加四个值以显示在Excel工作表的单个单元格中,如下所示: 如何在Java中达到预期的结果(替换)?

  • 问题内容: 我正在用SQL创建一个临时过程,因为我有一个用markdown编写的表的值,因此该表在Web浏览器中显示为HTML (markdown到HTML转换) 。 该列的字符串当前如下所示: 我目前正在使用粗体和斜体文本。这意味着 (以粗体显示的情况下), 我需要更换奇N次的格局与乃至倍。 我看到了replace(),但是它在字符串的所有模式上执行替换。 那么,如何仅当它是奇数或偶数时才替换子

  • 问题内容: 我有一个字符串叫做 我想用 我的输出替换DOT 我尝试了这段代码: 我正在获取StringIndexOutOfBoundsException。 如何更换圆点? 问题答案: 在点之前需要两个反斜杠,一个反斜杠可以使斜杠通过,而另一个反斜杠可以使点变为文字。正斜杠和星号视为原义。 http://docs.oracle.com/javase/7/docs/api/java/lang/Stri