如何在Java中解析字符串?

3

我正在做一个作业,但无法在我的在线教材或其他地方找到答案。

我的作业问题有四个部分:

  1. 提示用户输入包含两个由逗号分隔的字符串的字符串。

  2. 如果输入字符串不包含逗号,则报告错误。继续提示,直到输入有效字符串为止。注意:如果输入包含逗号,则假定输入也包含两个字符串。

  3. 从输入字符串中提取两个单词并删除任何空格。将字符串存储在两个单独的变量中并输出这些字符串。

  4. 使用循环,扩展程序以处理多行输入。继续,直到用户输入q退出。

最终结果应打印如下:
输入字符串:Jill,Allen
第一个单词:Jill
第二个单词:Allen
输入字符串:Golden,Monkey
第一个单词:Golden
第二个单词:Monkey
输入字符串:Washington,DC
第一个单词:Washington
第二个单词:DC

输入字符串:q

我的代码输出是不正确的。我不知道如何使自动的逗号不显示在我的第一个单词后面或显示为我的第二个单词。我尝试使用String [] array = s.split(",);,但类程序不识别此命令并出现错误。

这是我的代码:

import java.util.Scanner;

public class ParseStrings {
   public static void main(String[] args) {
      Scanner scnr = new Scanner(System.in); 
      Scanner inSS = null;                   
      String firstWord = " ";                
      String secondWord = "";
      String lineString = "";
      boolean inputDone = false; 

      while (!inputDone) {
         lineString = scnr.nextLine();
         inSS = new Scanner(lineString);
         firstWord = inSS.next();
         System.out.print("Enter input string: \n");


         if (firstWord.equals("q")){
            System.out.println("First word: " + firstWord);
            inputDone = true; 
         } else {
            secondWord = inSS.next();
            System.out.println("First word: " + firstWord);
            System.out.println("Second word: " + secondWord);
            System.out.println();
        }
      }


      return;
   }
}

我该怎么编写代码来包含和排除逗号并输出错误信息。我不理解我需要做什么。


你没有声明变量为s,Java 怎么能够分割它呢? - Papershine
5个回答

1

我不想为解决方案编写代码,只是给你一些输入,让你自己得出正确答案。毕竟这是你的练习。

  1. 您不需要使用两个Scanner,一个就足够了。
  2. 在执行scnr.nextLine()后检查变量lineString
  3. 通常使用字符串方法split可以帮助找出答案

谢谢您的帮助,但我仍然不理解。我成功地删除了最后一个字符,所以逗号输入不再自动,并添加了一行来输出错误消息。由于代码没有循环,我还需要更多的循环来完成任务,因此我将不得不重新审查我的代码。 - rmac

1
import java.util.Scanner;

public class ParseStrings {
   public static void main(String[] args) {
      Scanner scnr = new Scanner(System.in);
      String userInput = "";
      boolean inputDone = false; 

      while (!inputDone) {
         System.out.print("Enter input string: \n");
         userInput = scnr.nextLine()


         if (userInput.equals("q")){
            System.out.println("First word: " + userInput);
            inputDone = true; 
         } else {
            String[] userArray = userInput.split(",");
            System.out.println("First word: " + userArray[0]);
            System.out.println("Second word: " + userArray[1]);
            System.out.println();
        }
      }


      return;
   }
}

解释: 首先,创建一个对象Scanner。然后,将用户输入存储在userInput中。之后,Java检查用户是否输入了q,如果是,则结束应用程序。否则,Java将字符串分成两个单词,然后打印出来。

请记住,在学习编程语言时,理解代码是非常重要的过程,请理解代码,而不仅仅是复制粘贴它以提交作业。


感谢您提供详细信息。我明白了如何使用数组,然后添加以生成额外的“字符串中没有逗号”的错误。 - rmac
@rmac 希望这对你有所帮助!如果这是正确答案,你可以点击左侧的勾号。 - Papershine

1
我在班里遇到了同样的问题,这对我来说是一个非常具有挑战性的问题。我通过使用此处发布的代码并进行轻微修改来获得正确答案。感谢您的帮助。以下是我用于获得正确答案的上述代码的修改版本。
import java.util.Scanner;

public class ParseStrings {
   public static void main(String[] args) {
      Scanner scnr = new Scanner(System.in);
      String userInput = "";
      boolean inputDone = false; 

      while (!inputDone) {
         System.out.print("Enter input string: \n");
         userInput = scnr.nextLine();

         if (userInput.equals("q")){
            inputDone = true;
            break;
         }

         if(userInput.indexOf(",") == -1){ //if comma is not found in the user input
         System.out.println("Error: No comma in string");
         continue;
         }


          else {
            String[] userArray = userInput.split(",");
            System.out.println("First word: " + userArray[0].trim());
            System.out.println("Second word: " + userArray[1].trim());
            System.out.println();
            System.out.println();
        }
      }


      return;
   }
}

1
你的代码可行 :) 我只想补充一点,没有理由同时使用 inputDone 变量和 break;,因为 break 无论条件如何都会使代码退出 while 循环。所以你可以使用 while(true)break,并删除变量。或者你可以保留变量,在 while () 循环中使用它,并将 break; 替换为 continue;。注意:如果你只输入 ,anything,,你会得到一个错误(但是任务说这是可以的)。你也可以通过异常处理来解决这个问题 :) - Scratte

0

这对我有用。

import java.util.Scanner;
public class ParseStrings {
   public static void main(String[] args) {

      Scanner scnr = new Scanner(System.in); // Input stream for standard input
      Scanner inSS = null;              // Input string stream       
      String lineString = "";           // Input string   
      String firstWord = "";             // Word one
      String secondWord = "";             // word two
      boolean inputDone = false;
  
      while (!inputDone) {

         System.out.println("Enter input string: ");

         // Entire line into lineString
         lineString = scnr.nextLine();
  
         // Create new input string stream
         inSS = new Scanner(lineString);
     
         //Set the delimiter to "," and new line
         inSS.useDelimiter("[,\n]");
     
         if (lineString.equals("q")) {
            inputDone = true;
            break;
         }
     
         if (lineString.indexOf(",") == -1) {
            System.out.println("Error: No comma in string");
        
            continue;  
     
         }
         else {
  
            // Now process the line           
            firstWord = inSS.next();
            // Now process the line
            secondWord = inSS.next();
  
            System.out.println("First word: " + firstWord.trim().replace(",", ""));
            System.out.println("Second word: " + secondWord.trim().replace(",", "") + "\n\n");
         }   
     
      }
      return;
   }
}   

0
我在处理这个问题时使用的单元是关于使用inSS,所以我想尝试使用它来解决问题。我一直卡在第二个单词的逗号上,但在咨询别人后,有人建议使用分隔符来跳过逗号。当inSS捕获到单词时,我确实需要在打印行上添加trim()命令以去除任何围绕单词的空格。##
import java.util.Scanner;


public class ParseStrings {
   public static void main(String[] args) {
      Scanner scnr = new Scanner(System.in);
      //Input string stream
       Scanner inSS = null;
    //Input string 
    String inputWords;
    // first word
    String firstWord;
    //Comma check;
    String commaCheck;
    //second word
    String secondWord;
    //flag to indicate next iteration
       boolean inputDone;
    
       inputDone = false;

    //prompt the user to input string 
    System.out.println("Enter input string: ");
    
    //take input data as long as "q" is not ent
    while (!inputDone){
    
        //entire line into inputWords
        inputWords = scnr.nextLine();
        
        //Init scanner object with string
        inSS = new Scanner(inputWords);

        //Set the delimiter to "," and new line
        inSS.useDelimiter("[,\n]");
   
        //process the line
        firstWord = inSS.next();
   
        //output parsed values
        if (firstWord.equals("q")){
            inputDone = true;
            break;
        }
        
        //comma check
        if(inputWords.indexOf(",") == -1){
            System.out.println("Error: No comma in string");
            System.out.println("Enter input string: ");
            continue;
        }
        else {
            secondWord = inSS.next();
            System.out.println("First word: " + firstWord.trim());
            System.out.println("Second word: " + secondWord.trim());
            System.out.println();
            System.out.println();
        }
        System.out.println("Enter input string: ");
                

   
    }

    }   
}

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接