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?
Antwort
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.
Sie brauchen nicht wirklich eine Liste von Worttrennzeichen. Sie können einfach 'Character.isWhitepace' verwenden. – trutheality
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. –
@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" –
können Sie StringTokenizer verwenden http://www.java-samples.com/showtutorial.php?tutorialid=236
Sie können java.util.Scanner verwenden.
Oder verwenden Sie eine Pattern
(auch als regulärer Ausdruck bekannt), um zu versuchen, die Wörter zu vergleichen.
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.
- einen Scanner mit Ctor Verwenden (String)
- reguläre Ausdrücke und Spiel
- StringTokenizer
- Sie sich von char char Iterieren
- rekursive Iteration
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();
verwenden Sie auch String.substring
oder charAt[]
verwenden können.
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;
}
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);
}
}
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
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;
}
}
Dies funktioniert gut, um die Zeichenfolge aufzuteilen, wenn Sie auf den Raum stoßen –
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;
}
}
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]);
}
}
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)
- 1. Eine Zeichenfolge in eine ganze Zahl aufteilen
- 2. Wie kann ich eine Zeichenfolge, die Emoji enthält, in ein Array aufteilen?
- 3. Eine Zeichenfolge in Teile aufteilen
- 4. Eine Zeichenfolge in Java auf einer Registerkarte aufteilen
- 5. Eine Zeichenfolge in Dreierblöcke aufteilen?
- 6. Wie kann ich "." als Trennzeichen mit String.split() in Java
- 7. Wie kann ich eine Zeichenfolge in Java aufteilen und die Trennzeichen beibehalten?
- 8. Verwenden von regulären Ausdrücken zum Aufteilen einer Zeichenfolge in Java
- 9. Java String.split() Regex
- 10. Wie kann ich die Zeichenfolge finden und in node.js aufteilen?
- 11. Kann ich eine Zeichenfolge als Variable in Java verwenden
- 12. Wie kann ich Code-Blöcke in eine Liste aufteilen?
- 13. Zeichenfolge in Buchstaben aufteilen
- 14. Kann ich Collections.EMPTY_LIST ohne eine UncheckedException verwenden?
- 15. Wie kann ich eine CSV-Datei in PHP aufteilen?
- 16. Wie kann ich eine Zeichenfolge in Java korrekt formatieren?
- 17. Wie kann ich eine CollectionView erstellen, ohne Storyboard zu verwenden?
- 18. Eine Java-Zeichenfolge in eine andere Zeichenfolge ohne Verkettung einfügen?
- 19. Zeichenfolge in Array aufteilen
- 20. Eine Zeichenfolge in Wörter und Satzzeichen aufteilen
- 21. Wie kann ich eine Matrix in ungleich große Submatrizen aufteilen?
- 22. Wie kann ich eine Zeichenfolge in char [] konvertieren, ohne das Objekt zu kopieren?
- 23. Wie kann ich eine Zeichenfolge in mehr als einer Codezeile in JavaScript aufteilen?
- 24. Java Regular Expression - wie Backslash zu verwenden
- 25. Aufteilen eine Zeichenfolge in eine Liste von ganzen Zahlen in Java
- 26. Wie kann ich NSDate() in Teile aufteilen?
- 27. Aufteilen einer Zeichenfolge in C#
- 28. Wie kann ich eine Datei in Python aufteilen?
- 29. C# Aufteilen einer Zeichenfolge durch eine andere Zeichenfolge
- 30. Wie kann ich eine Zeichenfolge beim ersten Vorkommen von "-" (Minuszeichen) in zwei $ vars mit PHP aufteilen?
Was ist die genaue Darstellung des Problems? Gibt es nur auf, was Sie nicht verwenden können? Irgendwelche anderen Hinweise? – Tudor
Gewöhnen Sie sich nicht an, Vector zu verwenden, es wurde durch ArrayList ersetzt. –
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. –