2017-11-14 4 views
0

私は、文字列を受け取り、デリミタをカンマにして2つの出力に解析するプログラムを作成しようとしています。ユーザーは文字「q」を入力するまでループします。.parse()を使わずにJavaで文字列を解析するには?

すなわち:コンソールは入力を入力するように促し、ユーザ入力「第一、第二」と、第2のプロンプトの「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()メソッドをまだ使用していません、それは本当にそうではありませんこれはオプションです。

ありがとうございます!

答えて

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

を欲しがる、彼はコンマなどの区切り文字と文字列に2つの部分を持っていたと述べました。これはうまくいくはずです。あるいは、チェックの場合に別のものを追加し、複数のカンマを使用したことをユーザに知らせてもよい。 – Tharun

+0

あなたの投稿への私の編集がその問題を処理したと思います。 'arr.length'に' == 'の代わりに'> = 'を追加してください。 –

+0

私は条件の長さ== 2が正しいと思います。それを多くの部分に分割することができれば、問題の説明を考慮すると違反になります。 – Tharun

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

選択した文字がコンマでない場合は、その文字列が一時文字列に追加されます。

カンマの場合は、一時文字列が最初の単語になり、2番目の単語がコンマの後の文字列になります。

if(userInput.charAt(userInput.length()-1) == ',')は、入力がhello ,、またははカンマで ENDSものである場合に発生する可能性のある例外を処理します。

+0

がコンパイルされません: 'ch'が初期化されない可能性があります – Lino

+0

Soryyは、質問による秒 –

+0

使用'のstring.Split() ' –

関連する問題