Voglio dividere la stringa senza usare la funzione split?

Voglio dividere la stringa senza usare split. qualcuno può risolvere il mio problema, ma non riesco a trovare la logica esatta.

Suppongo che questo è compito di casa, quindi darò solo frammenti come suggerimenti:

Trovare gli indici di tutte le occorrenze di una data sottostringa

Ecco un esempio di utilizzo di indexOf con il parametro fromIndex per trovare tutte le occorrenze di una sottostringa all’interno di una stringa più grande:

 String text = "012ab567ab0123ab"; // finding all occurrences forward: Method #1 for (int i = text.indexOf("ab"); i != -1; i = text.indexOf("ab", i+1)) { System.out.println(i); } // prints "3", "8", "14" // finding all occurrences forward: Method #2 for (int i = -1; (i = text.indexOf("ab", i+1)) != -1; ) { System.out.println(i); } // prints "3", "8", "14" 

Link API String

  • int indexOf(String, int fromIndex)
    • Restituisce l’indice all’interno di questa stringa della prima occorrenza della sottostringa specificata, a partire dall’indice specificato. Se non si verifica tale occorrenza, viene restituito -1.

Domande correlate

  • Ricerca di una stringa in un’altra stringa

Estrazione di sottostringhe a determinati indici fuori da una stringa

Questo snippet estrae la substring a determinati indici da una stringa e li inserisce in un List :

 String text = "0123456789abcdefghij"; List parts = new ArrayList(); parts.add(text.substring(0, 5)); parts.add(text.substring(3, 7)); parts.add(text.substring(9, 13)); parts.add(text.substring(18, 20)); System.out.println(parts); // prints "[01234, 3456, 9abc, ij]" String[] partsArray = parts.toArray(new String[0]); 

Alcune idee chiave:

  • Efficace Java 2nd Edition, Articolo 25: Preferisce gli elenchi agli array
    • Funziona particolarmente bene se non sai quante parti ci saranno in anticipo

Link API String

  • String substring(int beginIndex, int endIndex)
    • Restituisce una nuova stringa che è una sottostringa di questa stringa. La sottostringa inizia al beginIndex specificato e si estende al carattere all’indice endIndex - 1 .

Domande correlate

  • Riempi l’array con i dati dell’elenco

Poiché questo sembra essere un compito concepito come pratica di codifica, sarò solo di guida. Nessun codice per lei, signore, anche se la logica e il codice non sono così lontani.

Sarà necessario scorrere ogni carattere della stringa e determinare se il carattere è o meno il delimitatore (virgola o punto e virgola, ad esempio). In caso contrario, aggiungilo all’ultimo elemento dell’array che intendi restituire. Se è il delimitatore, crea una nuova stringa vuota come ultimo elemento dell’array per iniziare a nutrire i tuoi personaggi.

Questa è la risposta esatta

 import java.util.StringTokenizer; public class tt { public static void main(String a[]){ String s = "012ab567ab0123ab"; String delims = "ab "; StringTokenizer st = new StringTokenizer(s, delims); System.out.println("No of Token = " + st.countTokens()); while (st.hasMoreTokens()) { System.out.println(st.nextToken()); } } } 

Adesso la maggior parte delle librerie standard Java sono open source

In questo caso puoi iniziare da qui

La logica è: passare attraverso l’intera stringa a partire dal primo carattere e ogni volta che trovi uno spazio copia l’ultima parte in una nuova stringa .. non così difficile?

Non puoi dividere con split (). L’unica altra opzione è quella di ottenere gli indici char delle stringhe e ottenere stringhe secondarie.

La strada da percorrere è definire prima la funzione che ti serve. In questo caso, probabilmente sarebbe:

 String[] split(String s, String separator) 

Il tipo di ritorno non deve essere un array. Può anche essere una lista:

 List split(String s, String separator) 

Il codice sarebbe quindi approssimativamente come segue:

  1. iniziare all’inizio
  2. trova la prossima occorrenza del delimitatore
  3. la sottostringa tra la fine del delimitatore precedente e l’inizio del delimitatore corrente viene aggiunta al risultato
  4. continuare con il passaggio 2 finché non si raggiunge la fine della stringa

Ci sono molti punti che devi considerare:

  • Cosa succede se la stringa inizia o termina con il delimitatore?
  • Cosa succede se i delimitatori multipli appaiono uno accanto all’altro?
  • Quale dovrebbe essere il risultato della divisione della stringa vuota? (1 campo vuoto o 0 campi)

Puoi farlo usando le librerie standard Java.

Dì che il delimitatore è : e

 String s = "Harry:Potter" int a = s.find(delimiter); 

e quindi aggiungere

 s.substring(start, a) 

a un nuovo array di stringhe.

Continua a farlo fino start < string length

Dovrebbe essere abbastanza, credo.

Utilizza il tokenizzatore di stringhe per dividere le stringhe in Java senza split :

 import java.util.StringTokenizer; public class tt { public static void main(String a[]){ String s = "012ab567ab0123ab"; String delims = "ab "; StringTokenizer st = new StringTokenizer(s, delims); System.out.println("No of Token = " + st.countTokens()); while (st.hasMoreTokens()) { System.out.println(st.nextToken()); } } } 
 public class MySplit { public static String[] mySplit(String text,String delemeter){ java.util.List parts = new java.util.ArrayList(); text+=delemeter; for (int i = text.indexOf(delemeter), j=0; i != -1;) { parts.add(text.substring(j,i)); j=i+delemeter.length(); i = text.indexOf(delemeter,j); } return parts.toArray(new String[0]); } public static void main(String[] args) { String str="012ab567ab0123ab"; String delemeter="ab"; String result[]=mySplit(str,delemeter); for(String s:result) System.out.println(s); } } 
 public class WithoutSpit_method { public static void main(String arg[]) { char[]str; String s="Computer_software_developer_gautam"; String s1[]; for(int i=0;i 

Risultato: sviluppatore di software per computer gautam

 /** * My method split without javas split. * Return array with words after mySplit from two texts; * Uses trim. */ public class NoJavaSplit { public static void main(String[] args) { String text1 = "Some text for example "; String text2 = " Second sentences "; System.out.println(Arrays.toString(mySplit(text1, text2))); } private static String [] mySplit(String text1, String text2) { text1 = text1.trim() + " " + text2.trim() + " "; char n = ' '; int massValue = 0; for (int i = 0; i < text1.length(); i++) { if (text1.charAt(i) == n) { massValue++; } } String[] splitArray = new String[massValue]; for (int i = 0; i < splitArray.length; ) { for (int j = 0; j < text1.length(); j++) { if (text1.charAt(j) == n) { splitArray[i] = text1.substring(0, j); text1 = text1.substring(j + 1, text1.length()); j = 0; i++; } } return splitArray; } return null; } } 

Dividi una stringa senza usare split ()

 static String[] splitAString(String abc, char splitWith){ char[] ch=abc.toCharArray(); String temp=""; int j=0,length=0,size=0; for(int i=0;ij){ j++; temp=""; } if(splitWith==ch[i]){ length++; }else{ temp +=Character.toString(ch[i]); } arr[j]=temp; } return arr; } public static void main(String[] args) { String[] arr=splitAString("abc-efg-ijk", '-'); for(int i=0;i 

}