【问题标题】:replacing some of the characters in a string [closed]替换字符串中的一些字符[关闭]
【发布时间】:2012-10-30 21:35:44
【问题描述】:

我正在完成我的 com 课上的一项作业,该作业要求我创建一个命运之轮游戏。我目前正在研究getDisplayedPhrase 方法,我将对此进行解释。所以对于这个程序,我有一个随机短语,例如
"this is a question, thanks for helping!"
我想把这句话改成
"**** ** * ********, ****** *** *******!"
在他们猜到之前,这句话应该是这样的。如您所见,我试图只更改字母,所以我创建了一个

private static final String alpha ="abcdefghijklmnopqrstuvwxyz" 

避免任何标点符号。 这是我目前所拥有的:

public String getDisplayedPhrase() {
    for (int i = 0; i<secretPhrase.length(); i++){
        I don't know what to put here and what method to use???
                I'm thinking of using charAt() or indexOf()
    }
    return displayedPhrase;
}

【问题讨论】:

  • 与其说我不知道​​,不如跳起来尝试使用 charAt() 和 indexOf() 然后卡住。

标签: java string replace char


【解决方案1】:
return secretPhrase.replaceAll("[a-zA-Z]","*")

【讨论】:

  • \w 如果还要转换 0-9。
  • 读者练习 - 扩展以应对重音字符 - 使用 \wles dégâts sur la Côte est en vidéo 将变为 ** **é**â** ** ** **ô** ** ** **é**
  • Java 正则表达式对本地化的支持很差。 link
【解决方案2】:

您可以使用 Character 类来确定字符是否为字母。

   String s = "this is a question, thanks for helping!";
            StringBuilder rep="";
            for(int i=0; i<s.length();i++){
                if(Character.isAlphabetic(s.charAt(i))){
                    rep.append("*");
                }
                else {
                    rep.append(s.charAt(i));
                }
            }
            System.out.println(rep);

您也可以使用String.replace() 并替换现有字符串而不是额外的新字符串

  for(int i=0; i<s.length();i++){
            if(Character.isAlphabetic(s.charAt(i))){
                s=s.replace(s.charAt(i), '*');
            }

        }
        System.out.println(s);

输出:

**** ** * ********, ****** *** *******!

【讨论】:

  • 这会创建几十个不必要的临时字符串,使用 StringBuilder
  • @jozefg 是的,刚刚编辑了谢谢.. :)
  • 显示非正则表达式答案的好主意,因为这是 OP 实际询问的内容。 :)
  • @BaileyS 我错过了什么吗? OP 在哪里提到他想要一个非正则表达式的答案?
  • @AlexisPigeon 问题中的少量代码显示了一个遍历字符串的 for 循环,在其中他说“我正在考虑使用 charAt() 或 indexOf()”。所以是的,他正在考虑一个非正则表达式的答案。您会看到我的答案也是正则表达式……这是更好的方法。尽管如此,有时人们还是会对一种方法感到好奇,即使它不是最好的,只要想想它是如何完成的。
【解决方案3】:

使用String.replaceAll(String regex, String replacement)。既然是作业,那我就让你研究一下正则表达式部分吧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 2012-04-19
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    相关资源
    最近更新 更多