Je veux trouver la longueur du dernier mot pour trouver initialement la longueur du deuxième mot de la phrase. voici mon plan, si je trouve la longueur de la dernière phrase alors dans la boucle for si je soustrais x, cela devrait toujours me donner la longueur du deuxième mot. Cela doit être fait en utilisant la boucle for et un scanner, où l'utilisateur saisit n'importe quelle phrase. En gros, j'ai besoin de savoir comment trouver la longueur de la dernière phrase. C'est ce que je dois savoir seulement.
voici mon code:
else if (option == 2){
int counter = 0 ;
for (int x = 0; x < phrase.length() - x; x++){
//in the "int x = 0" i need to put the length of the last word
// in a phrase
char n = phrase.charAt(x);
if (n == x);
counter++;
}
System.out.print("Second word has "+counter+" letters");
}
4 Réponses :
La longueur du dernier mot d'une phrase peut être obtenue comme ceci:
public int getLengthOfLastWord(String sentence) {
if (sentence == null || sentence.length() == 0) {
return 0;
}
// Split the sentence into words on space(s).
String[] words = sentence.split("\\s+");
return words[words.length - 1].length();
}
Pourriez-vous me montrer sans null, et sans aucune méthode intégrée de java comme sous-chaîne, donc seulement la boucle for?
Pour être précis, vous voudrez faire plus que simplement vérifier les espaces entre les mots, car si vous recherchez uniquement des espaces, il va traiter la ponctuation comme des virgules et des points comme faisant partie de la longueur des mots. Donc, votre meilleur pari est quelque chose comme isAlphabetic ().
Si votre plan est de parcourir les caractères de la chaîne (c'est-à-dire que vous ne voulez pas utiliser de fonctions de chaîne), un moyen très simple (qui ne vous obligerait pas à changer beaucoup votre code) est de compter en avant dans le tableau. La première fois que vous en trouvez un où:
int word_wanted = 2; // Want length of the second word. Or set to -1 if you want the last word.
int counter = 0; // How long is the current word
int on_word = 0; // What word number are we on
boolean in_word = false; // Are we currently in a word
for (int x = 0; x < phrase.length() - x; x++){
if (phrase.charAt(x).isAlphabetic()) {
if (!in_word) {
on_word++;
counter = 0;
in_word = true;
}
counter++;
} else {
if (in_word) {
in_word = false;
if (on_word == word_wanted) break; // Stop if we found the length of the word requested.
}
}
}
// counter now contains the length of the requested word. It can be returned
// as a return value from your method, or used for other purposes.
est vrai, vous savez que vous avez atteint le début du premier "mot" de la phrase.
Ensuite, vous continuez à regarder en avant et quand
!phrase.charAt(x).isAlphabetic()
Alors vous savez que vous avez atteint l'espace entre le premier mot et le deuxième mot. Mais il peut y avoir de la ponctuation, alors vous continuez à balayer vers l'avant jusqu'à ce que vous reveniez à isAlphabetic () étant à nouveau vrai, à quel point vous avez atteint le début du deuxième mot. Vous commencez maintenant à compter les caractères jusqu'à ce que vous trouviez à nouveau isAlphabetic () faux (vous avez atteint un espace ou une ponctuation). À ce stade, vous savez que vous avez atteint la fin du deuxième mot, et vous pouvez maintenant vérifier le nombre de caractères pendant combien de temps il a duré.
Cette méthode ne compte pas les nombres, la ponctuation, les espaces et caractères spéciaux dans le cadre d'une phrase. Vous devrez peut-être le caser spécialement pour des choses comme une apostrophe dans une contraction comme "ne pas", mais j'espère que cela vous donne une idée générale.
Il existe d'autres approches, mais c'est la plus proche à la façon dont vous avez votre code en ce moment. Évidemment, vous pouvez utiliser les fonctions String et obtenir un morceau de code plus court, etc., mais vous avez spécifiquement demandé une version conforme à votre méthode de boucle.
phrase.charAt(x).isAlphabetic()
Il n'est pas clair d'après votre question si vous voulez trouver la longueur de le dernier mot ou la longueur de le deuxième mot depuis le début ou la longueur de l'avant-dernier mot d'une phrase. Donc, j'ai écrit des solutions à toutes ces exigences. J'ai mis suffisamment de commentaires dans le code pour que vous puissiez le comprendre facilement.
Enter option: 2 Enter phrase: Hello world Length of second last word: 5
Un exemple d'exécution: strong>
Enter option: 2 Enter phrase: Good morning world Length of second last word: 7
Un autre exemple d'exécution:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
System.out.print("Enter option: ");
int option = Integer.parseInt(keyboard.nextLine());
if (option == 2) {
System.out.print("Enter phrase: ");
String phrase = keyboard.nextLine();
int index = 0, counter = 0;
// Start the loop from the end in the backward direction
for (int i = phrase.length() - 1; i >= 0; i--) {
if (phrase.charAt(i) == ' ') {
if (counter == 0) {
index = i;
}
counter++;
}
// Print the length when space has been found second time, and break the loop
if (counter == 2) {
System.out.println("Length of second last word: " + (index - i - 1));
break;
}
}
// If there are only two words in the phrase, space will be found only once. In
// that case the length of the second last word (which is the first word out of
// the two words) will be index (as the loop is running in the backward
// direction)
if (counter == 1) {
System.out.println("Length of second last word: " + index);
}
}
}
}
Un autre exemple d'exécution:
Enter option: 2 Enter phrase: Good morning world Length of the second word: 7
Enter option: 2 Enter phrase: Hello world Length of the second word: 5
Un exemple d'exécution:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
System.out.print("Enter option: ");
int option = Integer.parseInt(keyboard.nextLine());
if (option == 2) {
System.out.print("Enter phrase: ");
String phrase = keyboard.nextLine();
int index = 0, counter = 0;
for (int i = 0; i < phrase.length(); i++) {
if (phrase.charAt(i) == ' ') {
if (counter == 0) {
index = i;
}
counter++;
}
// Print the length when space has been found second time, and break the loop
if (counter == 2) {
System.out.println("Length of the second word: " + (i - index - 1));
break;
}
}
// If there are only two words in the phrase, space will be found only once. In
// that case the length of the second word will be phrase.length() - index - 1
if (counter == 1) {
System.out.println("Length of the second word: " + (phrase.length() - index - 1));
}
}
}
}
Un autre exemple d'exécution:
Enter option: 2 Enter phrase: Good Length of the last word: 4
Enter option: 2 Enter phrase: Good morning Length of the last word: 7
Un exemple d'exécution:
Enter option: 2 Enter phrase: Good morning world Length of the last word: 5
Un autre exemple d'exécution:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
System.out.print("Enter option: ");
int option = Integer.parseInt(keyboard.nextLine());
if (option == 2) {
System.out.print("Enter phrase: ");
String phrase = keyboard.nextLine();
int i;
// Start the loop from the end in the backward direction
for (i = phrase.length() - 1; i >= 0; i--) {
if (phrase.charAt(i) == ' ') {
System.out.println("Length of the last word: " + (phrase.length() - i - 1));
break;
}
}
// If the loop terminated without finding any space, it means there is only one
// word in the phrase
if (i == -1) {
System.out.println("Length of the last word: " + phrase.length());
}
}
}
}
Down-votant, veuillez laisser un commentaire sur ce que vous n'avez pas aimé dans cette réponse. Un vote défavorable sans commentaire n'est utile à personne.
Avec seulement la boucle for, longueur du dernier mot dans la phrase:
else if (option == 2){
int firstSpace = -1;
int secondSpace = -1;
for (int x = 0; x < phrase.length(); x++){
char n = phrase.charAt(x);
if (n == ' ' && firstSpace == -1) { //Space found the first time
firstSpace = x;
} else if (n == ' ') {
//FirstSpace has already been found
//So this should be second
secondSpace = x;
break; //No need to look anymore, we have both spaces
}
}
//When loop is finished, you will have first 2 spaces
//Characters between first 2 spaces is 2nd word
int lengthOfSecondWord = firstSpace - secondSpace;
System.out.print("Second word has " + lengthOfSecondWord + " letters");
}
Si vous voulez le deuxième mot, vous devez faire de même, sauf trouver le 1er et le 2ème espace, parce que les caractères entre les 2 premiers espaces forment le 2ème mot.
else if (option == 2){
int lastSpaceChar = 0;
for (int x = 0; x < phrase.length(); x++){
char n = phrase.charAt(x);
if (n == ' ') { //Indicate space
lastSpaceChar = x;
}
}
//When loop is finished, it will have the index of the last space
//So if you take total length - last space, you'll get the last word
int lengthOfLastWord = phrase.length() - spaceChar;
System.out.print("Last word has " + lengthOfLastWord + " letters");
}
Je suppose que vous êtes juste en train d'apprendre, donc ça va faire.
Bien sûr, vous devriez probablement gérer les erreurs et rechercher les cas extrêmes dans la pratique réelle.
Bonjour, comment feriez-vous la même chose pour la première lettre de la phrase?
L'index du premier espace serait la longueur du premier mot (longueur entre 0 et le premier espace, ce qui est égal à l'index du premier espace)
Veuillez ajouter l'entrée et la sortie (attendue) du programme
J'ai juste besoin de connaître le moyen le plus simple de trouver la longueur du dernier mot dans une phrase