Estoy tratando de escribir un programa que tome una cadena y la analice en dos salidas, con el delimitador como una coma. Se repite hasta que el usuario ingresa el carácter "q".

Es decir, la consola solicita ingresar una entrada y el usuario ingresa "primero, segundo" y luego "q" para el segundo indicador, y el resultado será:

Enter input string:
First word: first
Second word: second

Enter input string:

Si no hay una coma en la entrada, arroja un error y vuelve a preguntar

Es decir, el usuario ingresa el "primer segundo" y la salida será:

Enter input string:
Error: No comma in string
Enter input string:

A continuación se muestra lo que tengo hasta ahora:

import java.util.Scanner;

public class ParseStrings {
   public static void main(String[] args) {
         Scanner scnr = new Scanner(System.in); // Scanner for standard input
         Scanner inSS = null;                   // Scanner to write input to buffer
         String firstWord = "";                 // First word string
         String secondWord = "";                // Second word string
         String userInput = "";                 // Input from prompt
         int i = 0;                             // Loop iterator
         boolean inputDone = false;             // Boolean to repeat while loop
         boolean hasComma = false;              // Boolean to check for comma

         // Do while inputDone is false
         while (!inputDone) {

            //Prompt user to input a string
            System.out.println("Enter input string: ");

            // Write string to userInput
            userInput = scnr.nextLine();

            // Exit program if user inputs q
            if((userInput.equals("q"))) {
               inputDone = true;
               break;
            }
            else{

               // Write userInput to buffer
               inSS = new Scanner(userInput);

               // Write first word from buffer
               firstWord = inSS.next();

               // Loop through first word string
               for (i = 0; i < firstWord.length(); ++i) {

                  // If char is a comma, write everything after to secondWord and set inputDone to true
                  if(firstWord.charAt(i) == ',') {
                     secondWord = inSS.next();
                     hasComma = true;
                  }
               }

               // If hasComma is false, return error
               if (!hasComma){
                  System.out.println("Error: No comma in string");
               }
               // Else print first word and second word
               else {
                  System.out.println("First word: " + firstWord);
                  System.out.println("Second word: " + secondWord);
                  System.out.println("");
                  System.out.println("");
               }
            }
         }
        return;
       }
    }

Problemas:

  • No sé cómo quitar la coma de la salida.
  • Si no hay espacio, se produce un error.
  • Si hay un espacio entre la primera palabra y la coma, escribe firstWord pero no sobrescribe el valor anterior de secondWord (o errores si es la primera entrada dada)
  • Estoy tomando un curso de Java para principiantes y aún no hemos repasado el método .parse (), por lo que en realidad no es una opción en este momento.

¡Gracias de antemano!

0
Awspry 14 nov. 2017 a las 21:25

2 respuestas

La mejor respuesta

Intente usar la división de cadenas.

String str="first, second";
String[] arr=str.split(",");
if(arr.length == 2) {
    System.out.println("First :" + arr[0]);
    System.out.println("Second :" + arr[1]);
} if(arr.length > 2) {
    System.out.println("More than 1 comma used.");
} else {
    System.out.println("Error. No comma found.");
}

Puede usar trim () en caso de que su cadena tenga espacios alrededor de una coma.

1
Tharun 14 nov. 2017 a las 18:50

Así que lo que he hecho es probablemente la forma más perezosa y la más novato, pero funciona.

Utilice un bucle for para comprobar cada carácter de la cadena en busca de una coma.

char ch;
String str = "";

if(userInput.charAt(userInput.length()-1) == ',')
    System.out.println("Error. You must have a comma here.");
else {
for(int i = 0; i < userInput.length(); i++)
{
    ch = userInput.charAt(i);
    if(ch != ',')
        str += ch;
    else
    {
        firstWord = str;
        secondWord = userInput.substring(i+1);
        break;
    }
}
}

Si la letra seleccionada no es una coma, se agrega a la cadena temporal.

Si es una coma, entonces la cadena temporal se convierte en la primera palabra y la segunda palabra es la cadena después de la aparición de la coma.

if(userInput.charAt(userInput.length()-1) == ',') Maneja la excepción que puede surgir si la entrada es hello ,, o cualquier cosa que TERMINE con una coma.

0
Robo Mop 14 nov. 2017 a las 18:47