Mi maestra solicitó específicamente que dividiéramos una oración en palabras sin usar String.split()
. Lo he hecho usando un Vector
(que no hemos aprendido), un bucle while
y subcadenas. ¿Cuáles son otras maneras de lograr esto? (preferiblemente sin usar Vectors
/ArrayLists
).¿Cómo puedo dividir una cadena en palabras en Java sin usar String.split()?
Respuesta
Creo que tu profesor es pidiéndole que procese la cadena usted mismo (sin utilizar ninguna otra biblioteca para hacerlo por usted). Compruebe si este es el caso: si puede usarlos, existen cosas como StringTokenizer, Pattern y Scanner para facilitar el procesamiento de cadenas.
De lo contrario ...
Tendrá una lista de separadores de palabras (tales como espacio, tabulación, período, etc ...) y luego recorrer la matriz, la construcción de una cadena de un carácter a la vez hasta que se golpea la palabra separador. Después de encontrar una palabra completa (ha encontrado un separador de palabras), guárdela en su estructura (o lo que sea necesario), restablezca la variable en la que está construyendo la palabra y continúe.
Realmente no necesita una lista de separadores de palabras. Puedes usar 'Character.isWhitepace'. – trutheality
'' string.split() '' le permite separar palabras que están delineadas con caracteres que no sean espacios en blanco, por lo que tendría sentido implementar una lista de separadores. –
@trutheality ¿cómo podría tokenizar cadenas que tienen paréntesis, comas u otros caracteres impares que no son ni espacios en blanco ni caracteres de palabra (probablemente depende de cómo se escriba la especificación/asignación)? Podría ser más fácil/mejor implementarlo probando 'Character.isLetter' –
Puede utilizar StringTokenizer http://www.java-samples.com/showtutorial.php?tutorialid=236
Puede utilizar java.util.Scanner.
O utilice un Pattern
(también conocido como expresión regular) para intentar hacer coincidir las palabras.
Analizando la cadena carácter por carácter, copiando cada carácter en una nueva Cadena, y deteniéndolo cuando llegue a un carácter de espacio en blanco. Luego comience una nueva cadena y continúe hasta que llegue al final de la cadena original.
- utilizar un escáner con Héctor (String)
- expresiones regulares y combinar
- StringTokenizer
- iteración a ti mismo Char por carbón
- recursiva iteración
Puede usar java.util.StringTokenizer para dividir un texto usando el delimitador deseado. El delimitador predeterminado es 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
}
Como alternativa también se puede utilizar java.util.Scanner
Scanner s = new Scanner(myTextToBeSplit).useDelimiter("\\s");
while(s.hasNext()) {
System.out.println(s.next());
}
s.close();
También puede utilizar String.substring
o charAt[]
.
Sin utilizar un Vector
/List
(y sin manualmente volver a poner en práctica su capacidad de cambiar el tamaño de ellos para su función), puede tomar ventaja de la simple observación de que una cadena de longitud N
no puede tener más de (N+1)/2
palabras (en la división de enteros). Puede declarar una matriz de cadenas de ese tamaño, rellenarla de la misma manera que ocupó ese Vector
, y luego copiar los resultados en una matriz del tamaño de la cantidad de palabras que encontró.
Así:
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);
}
}
Inténtelo esto.
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;
}
Esperanza esto ayuda
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;
}
}
Esto funciona bien para dividir la cadena cuando encuentras el espacio –
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;
}
}
simple toque.! Mejora si quieres.
paquete 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);
}
}
Complejidad de tiempo: O (n)
- 1. ¿Cómo puedo dividir una cadena utilizando String.split() sin tener espacios finales o finales ni valores vacíos?
- 2. Dividir una cadena en palabras y puntuación
- 3. ¿Cómo puedo usar "." como el delimitador con String.split() en java
- 4. ¿Cómo puedo dividir una cadena en CSH?
- 5. PHP: dividir una cadena larga sin palabras rompiendo
- 6. Cómo dividir una cadena en Java, ignorando múltiples tokens sucesivos
- 7. Convertir cadena a matriz sin usar la función Dividir
- 8. lua dividir en palabras
- 9. ¿Qué regEx puedo usar para dividir una cadena en palabras completas, pero solo si comienzan con #?
- 10. ¿Cómo puedo dividir una cadena en make?
- 11. Dividir una cadena en palabras por múltiples delimitadores
- 12. Cómo dividir una cadena sin espacios de delimitador continuo
- 13. ¿Cómo dividir una cadena en una lista?
- 14. ¿Cómo puedo dividir varias palabras combinadas?
- 15. Dividir una cadena Java con '.'
- 16. Java - ¿Cómo dividir una cadena en los signos más?
- 17. cómo dividir una cadena contiene números en java?
- 18. ¿Cómo reemplazar palabras múltiples en una sola cadena en Java?
- 19. ¿Cómo puedo dividir una cadena y volver a unirme sin crear una lista intermedia en Python?
- 20. cómo dividir una cadena por posición en Java
- 21. ¿Cómo dividir una línea en palabras separadas por uno o más espacios en bash?
- 22. ¿Cómo puedo dividir esta cadena en una matriz?
- 23. ¿Es posible que Java String.split pueda devolver una Cadena nula []
- 24. ¿Cómo puedo dividir una cadena según los delimitadores en Qt?
- 25. Dividir una cadena en 2 en Python
- 26. Dividir una cadena en una cadena de palabras válidas usando la Programación Dinámica
- 27. Invertir palabras en una cadena
- 28. Cómo dividir una cadena en matriz en PostScript
- 29. ¿Cómo puedo dividir cadenas en J2ME?
- 30. Dividir una cadena en dos partes
¿Cuál es la declaración exacta del problema? ¿Simplemente enumera lo que no puedes usar? ¿Alguna otra pista? – Tudor
No adquiera el hábito de usar Vector, ha sido reemplazado por ArrayList. –
Si su maestra lo solicitó, él espera que ** USTED ** pueda hacerlo usted mismo y no pedirle a otros que lo hagan por usted. Creo que quiere que hagas algo usando el método 'indexOf (String, int)' de String. –