【问题标题】:How to parse strings in Java?如何在 Java 中解析字符串?
【发布时间】:2017-02-04 01:07:54
【问题描述】:

我正在做家庭作业,但无法在我的在线教科书或其他任何地方找到答案。

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

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

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

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

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

最终结果应打印如下: 输入输入字符串:Jill, Allen 第一个字:吉尔 第二个字:艾伦 输入输入字符串: Golden , Monkey 第一个字:金 第二个字:猴 输入输入字符串:华盛顿特区 第一个词:华盛顿 第二个字:直流

输入输入字符串: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怎么拆分呢?

标签: java parsing split


【解决方案1】:

我不想为解决方案编写代码。只需给您一些输入,您就可以自己得出正确的答案。毕竟这是你的运动。

  1. 你不需要使用两个Scanner一个就足够了。
  2. scnr.nextLine()执行后检查变量lineString
  3. String 方法split 通常有助于弄清楚

【讨论】:

  • 谢谢你的帮助,但我还是不明白。我确实设法删除了最后一个字符,因此逗号输入不是自动的,并添加了一行来输出错误消息。我还需要这个来循环更多的分配,所以我将不得不重新访问我的代码,因为它没有循环。
【解决方案2】:
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 希望这对您有所帮助!如果这是正确答案,您可以点击左侧的勾号
【解决方案3】:

我在课堂上遇到了同样的问题,这对我来说是一个非常具有挑战性的问题。我能够使用此处发布的代码获得正确答案,只需要对其进行非常小的修改。感谢您的帮助。下面是我用来得到正确答案的上述代码的修改版本。

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;
   }
}

【讨论】:

  • 您的代码有效:) 我只想补充一点,没有理由同时使用inputDone 变量和break;,因为break 会将代码从while 中取出-无论条件如何循环。因此,您可以将while(true)break 一起使用并删除该变量。或者您可以保留变量并在while ()-循环中使用它,并将break; 替换为continue;。注意:如果你只输入,anything,,你会得到一个错误(但作业说没问题)。你也可以通过异常处理来解决这个问题:)
猜你喜欢
  • 2010-12-02
  • 2021-08-24
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 2014-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多