2010-03-11 5 views
-1

Je veux imprimer la chaîne "mon nom est xxx" en tant que "xxx est le nom mon" sans utiliser de méthodes spéciales (comme les méthodes de paquets util en java); merciDivision de chaînes

+6

Vous voulez utiliser Java API sans utiliser l'API Java? C'est devoirs, non? – skaffman

+2

"Division de chaînes" semble étrange. – Zaki

+0

Pour ce que ça vaut, OP, cette tâche est appelée tokenization de chaîne. – polygenelubricants

Répondre

1

FYI, la classe String réside dans le package java.lang.

+0

Oui, mais il existe d'autres classes de manipulation de chaînes qui résident dans java.util, comme StringTokenizer. – Powerlord

5
String text = "my name is xxx"; 
    String reversed = ""; 
    for (String word : text.split(" ")) { 
    reversed = word + " " + reversed; 
    } 
    reversed = reversed.trim(); 

Si aucune appel de méthode est autorisée, il est un peu messier.

String text = "my name is xxx"; 
    char[] letters = text.toCharArray(); 
    char[] srettel = new char[letters.length]; 
    for (int last = letters.length, i = last - 1, j = 0; i >= -1; i--) { 
    if (i == -1 || letters[i] == ' ') { 
     for (int k = i + 1; k < last;) { 
      srettel[j++] = letters[k++]; 
     } 
     if (i != -1) srettel[j++] = ' '; 
     last = i; 
    } 
    } 
    String reversed = new String(srettel); 

Cela nécessite un peu plus d'explications. Nous lisons le tableau d'entrée de droite à gauche (i--) et chaque fois que nous trouvons un espace, ou lorsque nous touchons le mur gauche (i == -1), nous copions (for k) le mot que nous avons trouvé dans le tableau de sortie ([j++] =). Nous gardons la trace des limites de mots dans last.

+0

Est-ce que split() n'est pas une API JAVA? – Mohanavel

+0

@Mohanavel: Techniquement, tout ce qui est en dehors des opérateurs est l'API Java ... –

+2

+1 pour srettel. –

0

Je ne connais pas Java, mais voici l'approche du cas le plus défavorable.

Si vous ne voulez pas utiliser la méthode split(), puis

string text = "My name is Khan"; 

    int length = text.Length; 

    int numberOfWords = 0; 

    for (int i = 0; i < text.Length; i++) 
    { 
     if (text[i] == ' ') 
     { 
      numberOfWords++; 
     } 
    } 

    numberOfWords += 1; // no of words will be always plus one than no of space. 

    string[] wordCollection = new string[numberOfWords]; 

    int wordLocation = 0; 

    for (int i = 0; i < text.Length; i++) 
    { 
     if (text[i] == ' ') 
     { 
      wordLocation++; 
     } 

     wordCollection[wordLocation] += text[i]; 
    } 

    string reversedString = string.Empty; 

    foreach (string str in wordCollection) 
    { 
     reversedString = str + " " + reversedString; 
    } 

    Console.Write(reversedString.Trim()); 

Dans ce travail à domicile et son transfert à quelqu'un, alors vous êtes le plus lâche

+0

Certainement pas en utilisant un paquet Java ;-) –