如何在不使用String類的length()
方法的情況下找到字符串的長度?不使用length()方法的字符串的長度
回答
str.toCharArray().length
應該工作。或者怎麼樣:
str.lastIndexOf("")
甚至可能運行在固定時間:)
另外一個
Matcher m = Pattern.compile("$").matcher(str); m.find(); int length = m.end();
一個最愚蠢的解決方案:
str.split("").length - 1
這是作弊:
new StringBuilder(str).length()
? :-)
不錯。但提醒(不適用於aioobe,僅適用於普通讀者),它會創建一個新的數組對象並複製所有字符。顯然,沒有比String.length()更好的方法。 – 2010-05-26 05:54:36
您可以使用循環來檢查每個字符位置,並在傳遞最後一個字符時捕獲IndexOutOfBoundsException
。但爲什麼?
public int slowLength(String myString) {
int i = 0;
try {
while (true) {
myString.charAt(i);
i++;
}
} catch (IndexOutOfBoundsException e) {
return i;
}
}
注:這是非常不好的編程習慣和效率非常低。
您可以使用反射來檢查String
類中的內部變量,特別是count
。
缺少'}'並且有錯誤。並且可能不會編譯,因爲編譯器不知道它會始終返回一個值。 – aioobe 2010-05-26 05:56:11
返回我屬於'finally'塊。 – 2010-05-26 06:03:06
@aioobe:很好,謝謝。當您離開評論時,我可能正在糾正錯誤。 – 2010-05-26 06:07:16
String blah = "HellO";
int count = 0;
for (char c : blah.toCharArray()) {
count++;
}
System.out.println("blah's length: " + count);
這是我期待的答案。 – 2012-05-06 05:39:52
隱藏長度()的用法:
String s = "foobar";
int i = 0;
for(char c: s.toCharArray())
{
i++;
}
由於沒人貼頑皮後門路要走:
public int getLength(String arg) {
Field count = String.class.getDeclaredField("count");
count.setAccessible(true); //may throw security exception in "real" environment
return count.getInt(arg);
}
;)
更慢的一個
public int slowerLength(String myString) {
String[] str = myString.split("");
int lol=0;
for(String s:str){
lol++;
}
return (lol-1)
}
或者更慢,
public int slowerLength(String myString) {
String[] str = myString.split("");
int lol=0;
for(String s:str){
lol += s.toCharArray().length;
}
return lol
}
只是爲了完整性(這是不是在所有推薦):
int length;
try
{
length = str.getBytes("UTF-16BE").length/2
}
catch (UnsupportedEncodingException e)
{
throw new AssertionError("Cannot happen: UTF-16BE is always a supported encoding");
}
這工作,因爲一個char
是UTF-16編碼單元,str.length()
回報這些代碼單元的數量。每個UTF-16代碼單元佔用2個字節,所以我們除以2.此外,沒有用UTF-16BE寫入的字節順序標記。
爲半最好的方法已經公佈並沒有什麼更好的那麼字符串長度#...
重定向的System.out到一個FileOutputStream,是System.out.print使用(不println()一樣!),以打印字符串並獲取文件大小 - 這等於字符串長度。測量完成後不要忘記恢復System.out。
;-)
謹防Unicode的問題!將「Größte」寫入UTF-8編碼文件可創建8個字節的文件大小 - 但該字符串只有6個字符長。 – 2015-12-09 09:47:24
非常好的解決方案。這裏還有一些。
int length (String s)
{
int length = 0 ;
// iterate through all possible code points
for (int i = INTEGER . MIN_VALUE ; i <= INTEGER . MAX_VALUE ; i ++)
{
// count the number of i's in the string
for (int next = s . indexOf (i , next) + 1 ; next != -1 ; next = s . indexOf (i , next) + 1)
{
length ++ ;
}
}
return (length) ;
}
這裏是一個遞歸版本:
int length (String s)
{
int length = 0 ;
search :
for (int i = Integer . MIN_VALUE ; i <= Integer . MAX_VALUE ; i ++)
{
final int k = s . indexOf (i) ;
if (k != -1)
{
length = length (s . substring (0 , k)) + length (s . substring (k)) ;
break search ;
}
}
return (length) ;
}
更進一步
int length (String s)
{
int length ;
search ;
for (length = 0 ; true ; length ++)
{
int [ ] codePoints = new int [ length ] ;
for (each possible value of codePoints from {MIN_VALUE,MIN_VALUE,...} to {MAX_VALUE,MAX_VALUE,...})
{
if (new String (codePoints) . equals (s)) { break search ; }
}
}
}
我怎麼會忘記一個實際工作在合理的時間? (字符串長度#仍是首選)
int length (String s)
{
String t = s . replaceAll ("." , "A") ;
int length ;
String r = "" ;
search :
for (r = "" , length = 0 ; true ; r += "A" , length ++)
{
if (r . equals (t))
{
break search ;
}
}
return (length) ;
}
只是爲了用最笨的方法,我可以想出完成此:生成一個長度爲1的所有可能的字符串,使用等於他們比較原始的字符串;如果它們相等,則字符串長度爲1.如果沒有字符串匹配,則生成所有可能的長度爲2的字符串,比較它們,對於字符串長度爲2.等等繼續,直到找到字符串長度或宇宙結束,無論先發生什麼。
喜歡它 - 絕對是這個愚蠢問題的最佳解決方案。 – user949300 2016-03-09 05:08:54
這裏的另一種方式:
int length = 0;
while (!str.equals("")) {
str = str.substring(1);
++length;
}
本着同樣的精神(雖然少得多的效率):
String regex = "(?s)";
int length = 0;
while (!str.matches(regex)) {
regex += ".";
++length;
}
甚至:
int length = 0;
while (!str.matches("(?s).{" + length + "}")) {
++length;
}
這是你一個完整的程序可以編譯並運行它。
import java.util.Scanner;
class Strlen{
public static void main(String...args){
Scanner sc = new Scanner(System.in);
System.out.print("\nEnter Your Name =>" +" ");
String ab = sc.nextLine();
System.out.println("\nName Length is:" +len(ab));
}
public static int len(String ab){
char[] ac = ab.toCharArray();
int i = 0, k = 0;
try{
for(i=0,k=0;ac[i]!='\0';i++)
k++;
}
catch(Exception e){
}
return k;
}
}
代碼片段很有用,但應用降價以確保它顯示爲代碼。 – andersoj 2012-04-16 01:14:26
我們可以通過像字符數組的字符串迭代,並計算這樣(做的更腳踏實地的方式):
String s = "foo"
char arr[]=s.toCharArray();
int len = 0;
for(char single : arr){
len++;
}
使用「的foreach」版在for循環
試試下面的代碼
public static int Length(String str) {
str = str + '\0';
int count = 0;
for (int i = 0; str.charAt(i) != '\0'; i++) {
count++;
}
return count;
}
這隻有在原始字符串中不包含''\ 0''字節時纔有效。 – 2013-07-21 16:03:44
- 1. 字符串的長度比字符串的長度長
- 2. 在Prodedure中的MySQL函數LENGTH()不返回字符串長度作爲字節
- 3. 使用NASM的字符串的長度
- 4. 使用子字符串中的.length(VB.NET)
- 5. bash的字符串長度
- 6. 字符串的長度(Python)
- 7. 長度 「串」 與新的字符串的長度( 「串」)
- 8. 不同長度的字符串數組
- 9. 如何獲得在JavaScript字符串的長度,不使用本地長度方法
- 10. .length計數字符,而不是數組長度
- 11. python3.5中使用不同編碼的字符串的長度
- 12. PHP中使用字符串長度
- 13. 使用strlen檢查字符串長度
- 14. 查找字符串長度,而不使用strlen的和用C
- 15. DBReader提供字符串的長度而不是字符串
- 16. 查找最長字符串的長度
- 17. 爲什麼字符串的字節長度比長度長?
- 18. 使用字符串創建一個具有n長度,n高度的正方形使用字符串
- 19. Excel.Range.Find使用長度超過255個字符的字符串
- 20. 將字符串填充到任意長度的方法
- 21. 用於字符串長度的Java NPE
- 22. SQL子字符串使用charindex - somelength或字符串長度 - somelength
- 23. geohash字符串的長度和精度
- 24. 不使用字符串的可變長度算術計算器?
- 25. 計算並打印字符串的長度而不使用strlen()
- 26. 在帶有字符串長度方法的「if」語句中使用「或」語句
- 27. 獲取一個向量的長度不使用length()函數
- 28. 在Java中使用長字符串(heredocs) - 可讀的方法?
- 29. xslt中字符串的字節長度
- 30. 獲取字符串的字節長度
這是家庭作業? – 2010-05-26 05:47:11
爲什麼你需要以不同的方式去做? 'String.length()'是唯一正確的方法。 – poke 2010-05-26 05:51:26
您是否可能將Java字符串與以空字符串結尾的C/C++混淆? JLS 10.9字符串不是字符串(http://java.sun.com/docs/books/jls/third_edition/html/arrays.html#10.9) – polygenelubricants 2010-05-26 07:00:52