2012-05-07 7 views
5

Mein Lehrer forderte ausdrücklich, dass wir einen Satz in Wörter aufteilen, ohne String.split() zu verwenden. Ich habe es mit einem Vector (was wir nicht gelernt haben), einem while -loop und Teilstrings gemacht. Was sind andere Möglichkeiten, dies zu erreichen? (vorzugsweise ohne Verwendung von Vectors/ArrayLists).Wie kann ich eine Zeichenfolge in Java aufteilen, ohne String.split() zu verwenden?

+0

Was ist die genaue Darstellung des Problems? Gibt es nur auf, was Sie nicht verwenden können? Irgendwelche anderen Hinweise? – Tudor

+5

Gewöhnen Sie sich nicht an, Vector zu verwenden, es wurde durch ArrayList ersetzt. –

+2

Wenn dein Lehrer es wünscht, dann hofft er, dass ** DU ** es selbst tun kannst und andere nicht darum bitten, es für dich zu tun. Ich denke, er möchte, dass du etwas mit der 'indexOf (String, int)' Methode des Strings tust. –

Antwort

14

Ich glaube, dass Ihr Lehrer Sie werden gebeten, die Zeichenfolge selbst zu bearbeiten (ohne dafür andere Bibliotheken zu verwenden). Überprüfen Sie, ob dies der Fall ist. Wenn Sie sie verwenden können, gibt es Dinge wie StringTokenizer, Pattern und Scanner, um die Verarbeitung von Strings zu erleichtern.

Ansonsten ...

Sie erhalten eine Liste von Worttrennzeichen (zB Leerzeichen, Tabulator, Zeit, etc ...) müssen und dann das Array gehen, eine Zeichenfolge ein Zeichen in einer Zeit, bis Sie bauen triff das Worttrennzeichen. Nachdem Sie ein vollständiges Wort gefunden haben (Sie haben ein Worttrennzeichen gefunden), speichern Sie die Variable in Ihrer Struktur (oder was auch immer erforderlich ist), setzen Sie die Variable, in der Sie das Wort aufbauen, zurück und fahren Sie fort.

+1

Sie brauchen nicht wirklich eine Liste von Worttrennzeichen. Sie können einfach 'Character.isWhitepace' verwenden. – trutheality

+0

Mit '' string.split() '' können Sie Wörter trennen, die mit anderen Zeichen als Leerzeichen gekennzeichnet sind. Daher wäre es sinnvoll, eine Liste von Separatoren zu implementieren. –

+0

@trutheality Wie würden Sie Strings mit Klammern, Kommas oder anderen ungeraden Zeichen, die weder Leerzeichen noch Wortzeichen sind, in ein Token bringen (hängt wahrscheinlich davon ab, wie die Spezifikation/Zuweisung geschrieben wird)? Es könnte einfacher/besser sein, es für "Character.isLetter" –

2

Sie können java.util.Scanner verwenden.

1

Oder verwenden Sie eine Pattern (auch als regulärer Ausdruck bekannt), um zu versuchen, die Wörter zu vergleichen.

4

Die Zeichenfolge Zeichen für Zeichen analysieren, jedes Zeichen in eine neue Zeichenfolge kopieren und anhalten, wenn Sie ein Leerzeichen erreichen. Starten Sie dann eine neue Zeichenfolge und fahren Sie fort, bis Sie das Ende der ursprünglichen Zeichenfolge erreicht haben.

1
  • einen Scanner mit Ctor Verwenden (String)
  • reguläre Ausdrücke und Spiel
  • StringTokenizer
  • Sie sich von char char Iterieren
  • rekursive Iteration
2

Sie können java.util.StringTokenizer verwenden, um einen Text mit dem gewünschten Trennzeichen zu teilen. Das Standardtrennzeichen ist SPACE/TAB/NEW_LINE.

String myTextToBeSplit = "This is the text to be split into words."; 
StringTokenizer tokenizer = new StringTokenizer(myTextToBeSplit); 
while (tokinizer.hasMoreTokens()) { 
    String word = tokinizer.nextToken(); 
    System.out.println(word); // word you are looking in 
} 

Als Alternative können Sie auch java.util.Scanner

Scanner s = new Scanner(myTextToBeSplit).useDelimiter("\\s"); 
while(s.hasNext()) { 
System.out.println(s.next()); 
} 
s.close(); 
-3

verwenden Sie auch String.substring oder charAt[] verwenden können.

1

ohne Verwendung eines Vector/List (und ohne manuell neu Umsetzung ihrer Fähigkeit, sich für Ihre Funktion die Größe neu), können Sie die Vorteile der einfachen Beobachtung nehmen kann, dass ein String der Länge N nicht mehr als (N+1)/2 Worte haben können (in ganzzahliger Division). Sie können ein Array mit Strings dieser Größe deklarieren, es so auffüllen, wie Sie es ausgefüllt haben Vector, und dann die Ergebnisse in ein Array mit der Größe der gefundenen Wörter kopieren.So

:

String[] mySplit(String in){ 
    String[] bigArray = new String[ (in.length()+1)/2 ]; 

    int numWords = 0; 
    // Populate bigArray with your while loop and keep 
    // track of the number of words 

    String[] result = new String[numWords]; 
    // Copy results from bigArray to result 

    return result; 
} 
1
public class MySplit { 

public static String[] mySplit(String text,String delemeter){ 
    java.util.List<String> parts = new java.util.ArrayList<String>(); 
    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); 
} 

} 
0

Bitte versuchen Sie dies.

public static String[] mysplit(String mystring) { 

    String string=mystring+" ";    //append " " bcz java string does not hava any ending character 
    int[] spacetracker=new int[string.length()];// to count no. of spaces in string 
    char[] array=new char[string.length()];  //store all non space character 
    String[] tokenArray=new String[string.length()];//to return token of words 

    int spaceIndex=0; 
    int parseIndex=0; 
    int arrayIndex=0; 
    int k=0; 
    while(parseIndex<string.length()) 
    { 
     if(string.charAt(parseIndex)==' '||string.charAt(parseIndex)==' ') 
     { 
      spacetracker[spaceIndex]=parseIndex; 
      spaceIndex++; 
      parseIndex++; 
     }else 
     { 
     array[arrayIndex]=string.charAt(parseIndex); 
     arrayIndex++; 
     parseIndex++; 
     } 
    } 


    for(int i=0;i<spacetracker.length;i++) 
    { 
     String token=""; 
     for(int j=k;j<(spacetracker[i])-i;j++) 
     { 
      token=token+array[j]; 
      k++; 

     } 
     tokenArray[i]=token; 
     //System.out.println(token); 
     token=""; 

    } 
    return tokenArray; 
} 

this helps

2
import java.util.Arrays; 
public class ReverseTheWords { 

    public static void main(String[] args) { 
     String s = "hello java how do you do"; 
     System.out.println(Arrays.toString(ReverseTheWords.split(s))); 
    } 

    public static String[] split(String s) { 
     int count = 0; 
     char[] c = s.toCharArray(); 

     for (int i = 0; i < c.length; i++) { 
      if (c[i] == ' ') { 
       count++; 
      } 
     } 
     String temp = ""; 
     int k = 0; 
     String[] rev = new String[count + 1]; 
     for (int i = 0; i < c.length; i++) { 
      if (c[i] == ' ') { 
       rev[k++] = temp; 
       temp = ""; 
      } else 
       temp = temp + c[i]; 
     } 
     rev[k] = temp; 
     return rev; 
    } 

} 
+0

Dies funktioniert gut, um die Zeichenfolge aufzuteilen, wenn Sie auf den Raum stoßen –

1
public class sha1 { 
public static void main(String[] args) { 
    String s = "hello java how do you do"; 
    System.out.println(Arrays.toString(sha1.split(s))); 
} 
public static String[] split(String s) { 
    int count = 0; 
    char[] c = s.toCharArray(); 

    for (int i = 0; i < c.length; i++) { 
     if (c[i] == ' ') { 
      count++; 
     } 
    } 
    String temp = ""; 
    int k = 0; 
    String[] rev = new String[count + 1]; 
    for (int i = c.length-1; i >= 0; i--) { 
     if (c[i] == ' ') { 
      rev[k++] = temp; 
      temp = ""; 
     } else 
      temp = temp + c[i]; 
    } 
    rev[k] = temp; 
    return rev; 
} 

}

1

Einfache Touch.! Verbessere, wenn du willst.

Paket com.asif.test;

public class SplitWithoutSplitMethod {

public static void main(String[] args) { 

    split('@',"[email protected]@handsome"); 
} 

static void split(char delimeter, String line){ 

    String word = ""; 
    String wordsArr[] = new String[3]; 

    int k = 0; 
    for(int i = 0; i <line.length(); i++){ 

     if(line.charAt(i) != delimeter){ 
      word+= line.charAt(i); 
     }else{ 
      wordsArr[k] = word; 
      word = ""; 
      k++;      
     } 
    } 
    wordsArr[k] = word; 
    for(int j = 0; j <wordsArr.length; j++) 
    System.out.println(wordsArr[j]); 

} 

}

0
import java.util.*; 
class StringSplit { 
    public static void main(String[] args) 
    { 
     String s="splitting a string without using split()"; 
     ArrayList<Integer> al=new ArrayList<Integer>();  //Instead you can also use a String 
     ArrayList<String> splitResult=new ArrayList<String>(); 
     for(int i=0;i<s.length();i++) 
      if(s.charAt(i)==' ') 
       al.add(i); 
     al.add(0, 0); 
     al.add(al.size(),s.length()); 
     String[] words=new String[al.size()]; 
     for(int j=0;j<=words.length-2;j++) 
       splitResult.add(s.substring(al.get(j),al.get(j+1)).trim()); 
     System.out.println(splitResult); 
    } 
} 

Zeitkomplexität: O (n)

Verwandte Themen