Come posso trovare la lunghezza di una stringa senza utilizzare il metodo length()
della classe String?Lunghezza della stringa senza utilizzare il metodo length()
risposta
str.toCharArray().length
dovrebbe funzionare.O come circa:
str.lastIndexOf("")
Probabilmente funziona anche in tempo costante :)
Un altro
Matcher m = Pattern.compile("$").matcher(str); m.find(); int length = m.end();
Una delle soluzioni più stupide:
str.split("").length - 1
E 'questo cheating:
new StringBuilder(str).length()
? :-)
Nice. Ricorda però (non per aioobe, solo per il lettore casuale) crea un nuovo oggetto array e copia tutti i personaggi. Ovviamente, non esiste un modo migliore di String.length(). –
È possibile utilizzare un ciclo per controllare ogni posizione del carattere e prendere il IndexOutOfBoundsException
quando si passa l'ultimo carattere. Ma perché?
public int slowLength(String myString) {
int i = 0;
try {
while (true) {
myString.charAt(i);
i++;
}
} catch (IndexOutOfBoundsException e) {
return i;
}
}
Nota: Questo è molto cattiva pratica di programmazione e molto inefficiente.
È possibile utilizzare la riflessione per esaminare le variabili interne nella classe String
, in particolare count
.
Manca un '} 'e ha un errore di off-by-one. e probabilmente non verrà compilato poiché il compilatore non sa che restituirà sempre un valore. – aioobe
return I appartiene piuttosto al blocco 'finally'. –
@aioobe: buona cattura, grazie. Probabilmente stavo correggendo l'off-by-one quando hai lasciato il commento. –
String blah = "HellO";
int count = 0;
for (char c : blah.toCharArray()) {
count++;
}
System.out.println("blah's length: " + count);
Questa è la risposta che mi aspetterei in realtà. –
lunghezza nascosta() utilizzo:
String s = "foobar";
int i = 0;
for(char c: s.toCharArray())
{
i++;
}
Dal momento che nessuno è così ancora pubblicato la porta sul retro giocherellona:
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);
}
;)
Ancora più lenta uno
public int slowerLength(String myString) {
String[] str = myString.split("");
int lol=0;
for(String s:str){
lol++;
}
return (lol-1)
}
O anche più lento,
public int slowerLength(String myString) {
String[] str = myString.split("");
int lol=0;
for(String s:str){
lol += s.toCharArray().length;
}
return lol
}
Solo per completezza (non e questo è affatto consigliato):
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");
}
Questo funziona perché una char
è un'unità di codice UTF-16, e str.length()
rendimenti il numero di tali unità di codice. Ogni unità di codice UTF-16 occupa 2 byte, quindi divideremo per 2. Inoltre, non vi è alcun segno di ordine byte scritto con UTF-16BE.
Per i semi migliori-metodi sono stati pubblicati e non c'è niente di meglio quindi String # lunghezza ...
Redirect System.out ad un FileOutputStream, utilizzare System.out.print (non println()!) Per stampa la stringa e ottieni le dimensioni del file - questo è uguale alla lunghezza della stringa. Non dimenticare di ripristinare System.out dopo la misurazione.
;-)
Attenzione ai problemi Unicode! La scrittura di "Größte" in un file codificato in UTF-8 crea una dimensione del file di 8 byte, ma la stringa ha una lunghezza di soli 6 caratteri. –
Soluzioni molto carine. Eccone altri
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) ;
}
Ecco una versione ricorsiva:
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) ;
}
E ancora più
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 ; }
}
}
}
Come potrei dimenticare uno che funziona in realtà in un tempo ragionevole? (. String # lunghezza è ancora preferito)
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) ;
}
Proprio per completare questo con il metodo più stupido che posso venire con: Genera tutte le possibili stringhe di lunghezza 1, l'uso è uguale per confrontarle con la stringa originale; se sono uguali, la lunghezza della stringa è 1. Se nessuna stringa corrisponde, genera tutte le stringhe possibili di lunghezza 2, confrontale, per la lunghezza della stringa 2. Ecc. Continua finché non trovi la lunghezza della stringa o l'universo finisce, qualunque cosa accada prima.
Love it - sicuramente la soluzione migliore per questa stupida domanda. – user949300
Ecco un altro modo:
int length = 0;
while (!str.equals("")) {
str = str.substring(1);
++length;
}
Con lo stesso spirito (anche se molto meno efficiente):
String regex = "(?s)";
int length = 0;
while (!str.matches(regex)) {
regex += ".";
++length;
}
O anche:
int length = 0;
while (!str.matches("(?s).{" + length + "}")) {
++length;
}
Questo è un programma completo che si può compilare ed eseguirlo.
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;
}
}
Lo snippet di codice è utile, ma applica il markdown per assicurarti che venga visualizzato come codice. – andersoj
Siamo in grado di scorrere la stringa come un array di caratteri, e contare in questo modo (A molto di più i piedi per terra modo di farlo):
String s = "foo"
char arr[]=s.toCharArray();
int len = 0;
for(char single : arr){
len++;
}
Utilizzando la versione "foreach" di il ciclo for
prova sottostante codice
public static int Length(String str) {
str = str + '\0';
int count = 0;
for (int i = 0; str.charAt(i) != '\0'; i++) {
count++;
}
return count;
}
Funzionerà solo se la stringa originale non contiene già un byte ''\ 0''. –
- 1. Lunghezza della stringa senza spazi (C#)
- 2. Sanitizza stringa HTML senza utilizzare pericolosamenteSetInnerHTML per il controllo della lunghezza
- 3. lunghezza della stringa tra puntatori
- 4. Posso ridefinire la lunghezza della stringa #?
- 5. Limita la lunghezza della stringa in FreeMarker
- 6. Qual è il codice "length === + length" significa in JavaScript?
- 7. Impossibile utilizzare il metodo di estensione all'interno della vista parziale
- 8. Errore: tentativo di utilizzare lunghezza zero nome della variabile
- 9. C lunghezza stringa dinamica
- 10. Lunghezza della corda
- 11. Decodifica della lunghezza della corsa sul posto?
- 12. Differenza tra @Size, @Length e @Column (lunghezza = valore)
- 13. Come ottenere la lunghezza della stringa
- 14. Python lunghezza della confusione stringa unicode
- 15. lunghezza e accuratezza della stringa geohash
- 16. Come ottengo la lunghezza media della stringa in mysql?
- 17. Verificare la lunghezza della stringa binaria?
- 18. Ottenere la lunghezza della stringa in EL
- 19. lunghezza della stringa supera il valore impostato sulla proprietà maxJsonLength
- 20. Ottenere la lunghezza effettiva della stringa definita in Java
- 21. misura la lunghezza della stringa contenente caratteri estesi
- 22. Analisi della stringa fino alla data senza utilizzare SimpleDateFormat?
- 23. integer length in javascript
- 24. Espressione regolare per limitare la lunghezza della stringa
- 25. determinare la lunghezza della stringa di testo DB2
- 26. Lunghezza massima della stringa memorizzata con App Engine?
- 27. Qual è il metodo corretto per calcolare l'intestazione Content-length in node.js
- 28. Ottenere risposta della richiesta http senza lunghezza del contenuto?
- 29. Limitazione lunghezza della stringa incollato UITextView o UITextField
- 30. PHP - lunghezza della stringa che contiene emoji/caratteri speciali
è questo Homework? –
Perché dovresti farlo in un modo diverso? 'String.length()' è l'unico modo corretto per farlo. – poke
Stai forse confondendo le stringhe Java con stringhe con terminazione null ala C/C++? JLS 10.9 Arrray of Characters non è una stringa (http://java.sun.com/docs/books/jls/third_edition/html/arrays.html#10.9) – polygenelubricants