如何在不使用.parse()的情况下解析Java中的String?

时间:2017-11-14 18:25:05

标签: java parsing

我正在尝试编写一个程序,该程序将接受一个字符串并将其解析为两个输出,分隔符为逗号。它循环直到用户输入字符" q"。

即:控制台提示输入输入,用户输入"第一,第二"然后" q"对于第二个提示,输出将是:

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

Enter input string:

如果输入中没有逗号,则会抛出错误并再次提示

即。用户输入"第一秒"输出将是:

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

以下是我到目前为止:

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

问题:

  • 我不知道如何从输出中删除逗号
  • 如果没有空格则会出错
  • 如果第一个单词和逗号之间有空格,则会写入firstWord,但不会覆盖secondWord的前一个值(如果它是第一个输入,则会出错)
  • 我参加了初学者的Java课程,但我们还没有考虑过.parse()方法,所以目前它还不是一个选项。

提前谢谢!

2 个答案:

答案 0 :(得分:1)

尝试使用字符串拆分。

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.");
}

如果您的字符串在逗号周围有任何空格,您可以使用trim()。

答案 1 :(得分:0)

所以我所做的可能是最懒散和最新手的方式,但确实有效。

使用for循环检查逗号字符串的每个字符。

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

如果所选字母不是逗号,则会将其添加到临时字符串中。

如果是逗号,则临时字符串成为第一个单词,第二个单词是逗号出现后的字符串。

if(userInput.charAt(userInput.length()-1) == ',')处理输入为hello ,时可能出现的异常,或使用逗号 ENDS 的任何内容。