如何在不使用任何内置函数的情况下在Java中找到String的长度? (甚至不是charAt()或toCharArray()或length())

时间:2016-03-09 04:19:12

标签: java arrays string reverse

要求问题在不使用任何内置函数(如length(),toCharArray())的情况下查找Java中String的长度?我的方法是以某种方式将其转换为charArray,以便我们可以迭代并找到长度。

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

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

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

3 个答案:

答案 0 :(得分:2)

您可以通过将count变量accessibility设置为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

答案 1 :(得分:1)

绝对有可能。我认为有用的两个来源是javahungrycodenirvana

此外,似乎之前已经提出过这个问题。请参考String length without using length() method

编辑:道歉,javahungry和codenirvana链接使用了这些被排除的方法之一。在上面的stackoverflow链接中通过aioobe的解决方案后,我发现以下内容可以正常工作(假设您至少可以使用String类之外的函数)。

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

public class StringLength {     String testString;

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

}

答案 2 :(得分:1)

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

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