【问题标题】:Simple java, String length简单的java,字符串长度
【发布时间】:2016-04-16 19:47:03
【问题描述】:

我发现很难将字符串长度作为“*”符号返回。 noDisclosure 方法在接口中,TopClearance 是 Clearance 的子类。此外,gettermethod getSecret() 在超类中-->Clearance,所以我已经继承了它。

我知道返回字符串是使用 Str.length() 但我只是不知道如何获取长度并将其转换为“*”

这是问题的一部分。

TopClearance 中的 noDisclosure 方法将返回一个符号“*”的序列,与 Clearance 中的秘密一样长。 因此,例如,如果 top 是 TopClearance 实例的名称并且 top.getSecret() 是“魔术”,那么 top.noDisclosure() 将返回“*****”,因为“magic”的长度为 5。 TopClearance 中的方法 passport 将返回 Clearance 中名称的前两个字符。 因此,例如,如果 top 是 TopClearance 实例的名称,并且 top.getName() 是“Mark”,那么 top.passport() 将返回“Ma”。

【问题讨论】:

    标签: java string oop inheritance interface


    【解决方案1】:

    您可以使用 String.replaceAll() 方法,该方法使用正则表达式,其中 .代表任意字符:

    text.replaceAll(".", "*");
    

    【讨论】:

      【解决方案2】:

      您可以为 noDisclosure 使用 for 循环来屏蔽单词:

      String maskedWord = "";
      for(int i = 0; i < word.length(); i++) {
          maskedWord += "*";
      }
      

      对于passport,可以使用substring方法获取一段名称:

      String shortenedName = name.substring(0, 2);
      

      【讨论】:

      • 它完成了工作(并且可能是最合乎逻辑的),但您不想这样做。此外,如果您要这样做,那么至少使用 StringBuilder 而不是 String concat。
      • 我不知道他们对 Strings 的深入了解,所以我想我会提供一个更简单的解决方案,并让其他人也提供其他想法。
      • 我在编程方面并不是很先进,所以我认为这种方法是合乎逻辑的。谢谢大佬!
      【解决方案3】:

      您可以使用已知的字长创建一个新字符串:

      String maskedWord = new String(new char[word.length()]).replace("\0", "*");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-31
        • 1970-01-01
        • 2017-09-24
        相关资源
        最近更新 更多