要求问题在不使用任何内置函数(如length(),toCharArray())的情况下查找Java中String的长度?我的方法是以某种方式将其转换为charArray,以便我们可以迭代并找到长度。
我搜索但是在大多数地方使用了charAt(),这又是一个内置函数。
我检查了java是如何做到的。 String类有一个count变量,用于存储字符串的长度。但这是私人和最终的。所以我们无法在String类之外访问它。 对于存储字符串,String类使用一个字符数组,该数组也是私有和最终的。所以我们也不能使用这个数组来查找长度。
所以需要知道我们怎么能找到它?或者是否也可以在不使用任何内置函数的情况下找到长度?
答案 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)
绝对有可能。我认为有用的两个来源是javahungry和codenirvana。
此外,似乎之前已经提出过这个问题。请参考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.等等。继续,直到找到字符串长度或宇宙结束,无论先发生什么。“