【问题标题】:How can we find the length of a String in Java without using any inbuilt functions? (not even charAt() or toCharArray() or length())我们如何在不使用任何内置函数的情况下在 Java 中找到字符串的长度? (甚至不是 charAt() 或 toCharArray() 或 length())
【发布时间】:2016-03-09 04:19:12
【问题描述】:

问题被问到在 Java 中不使用任何内置函数(如 length()、toCharArray())来查找字符串的长度?我的方法是以某种方式将其转换为 charArray 以便我们可以迭代并找到长度。

我搜索过,但在大多数地方都使用了 charAt(),这又是一个内置函数。

我检查了 java 是如何做到的。 String 类有一个 count 变量,用于存储字符串的长度。但它是私人的和最终的。所以我们不能在 String 类之外访问它。 为了存储字符串,String 类使用一个字符数组,它也是私有的和最终的。所以我们不能用这个数组来求长度。

所以需要知道我们怎样才能找到它?或者是否也可以在不使用任何内置函数的情况下找到长度?

【问题讨论】:

  • 是的,祝你好运
  • 不确定是否可以使用 no 内置函数。有一些方法可以避免使用 length(),但如果您实际上禁止使用任何库函数,您实际上无法对该字符串执行任何操作。我想你可以用 JNI 做一些坏事,但我怀疑 OP 知道那是什么。
  • 内置方法有什么问题?
  • @KarthikeyanVaithilingam 我也想知道同样的事情,但我猜有些面试官宁愿炫耀他知道多少晦涩的知识,也不愿找到合适的人选。

标签: java arrays string reverse


【解决方案1】:

您可以通过将 count 变量可访问性设置为 true 来访问 String 类中的 count 变量,尽管有时可能会出现安全异常。例如:

Field var = String.class.getDeclaredField("count"); var.setAccessible(true); String str = "variable"; int count = var.getInt(str);

参考:http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/AccessibleObject.html

【讨论】:

    【解决方案2】:

    我将从链接的 SO 问题中引用最好、最荒谬的答案。这个只使用了构造函数和equals(),所以可以说它没有使用任何String的方法。所有功劳都应归于原始回答者。

    "只是用我能想到的最愚蠢的方法来完成这个:生成所有可能的长度为1的字符串,使用equals将它们与原始字符串进行比较;如果它们相等,则字符串长度为1。如果没有字符串匹配,生成所有可能的长度为 2 的字符串,比较它们,得到长度为 2 的字符串。等等。继续直到找到字符串长度或宇宙结束,无论先发生什么。”

    【讨论】:

      【解决方案3】:

      这绝对是可能的。我发现有用的两个来源是javahungrycodenirvana

      另外,这个问题似乎以前被问过。请参考String length without using length() method

      编辑:抱歉,javahungry 和 codenirvana 链接使用了其中一种被排除的方法。按照上面stackoverflow链接中aioobe的解决方案,我发现以下工作(假设您至少可以使用String类之外的函数)。

      import java.util.regex.Matcher;
      import java.util.regex.Pattern;
      

      公共类 StringLength { 字符串测试字符串;

      public StringLength() {
          testString = "I Love Boats"; // Place your string here
          System.out.println("Length of String is " + getStringLength(testString));
      }
      
      // Implemented using https://stackoverflow.com/questions/2910336/string-length-without-using-length-method?lq=1
      // solution originally proposed by user aioobe
      public int getStringLength(String s) {
          int strLength = 0;
      
          Matcher m = Pattern.compile("$").matcher(testString);
          m.find();
          strLength = m.end();
      
          return strLength;
      }
      
      public static void main(String Args[]) {
          new StringLength();
      }
      

      }

      【讨论】:

      • 由于都使用charAt()是String的内置函数,所以都是虚假广告。
      • 我修改了我的答案,非常感谢您向我指出这一点。我忘了检查那个方法调用。
      • 这行得通..非常感谢。我们也可以在不使用内置函数的情况下反转字符串吗?
      • 首先我们需要弄清楚如何拆分。如果您被允许使用它,我已经看到它使用 StringTokenizer api 完成。将上述代码 sn-p 中的字符串长度输入一个 int 值,而不是在 for 循环中从此链接上找到的代码的第一位调用 length():devxTip。一旦我回到电脑上,我会自己尝试一下。拆分成 char 数组什么的后,我们可以向后遍历数组并吐出那个字符串。
      猜你喜欢
      • 2014-09-20
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-05
      • 1970-01-01
      • 2014-08-13
      相关资源
      最近更新 更多