2017-09-21 4 views
-1

に私はA + BまたはAlpha + Betaのような数式を入力することができ、次のコード文字列トークン化は、Java

System.out.println("Enter equation you want to calculate:"); 
    System.out.println("Equation can not have more than two variables"); 
    equation = input.next(); 

    StringTokenizer var = new StringTokenizer(equation,""); 
    while (var.hasMoreElements()) 
    { 
     System.out.println(var.nextToken()); 
    } 

ユーザーを持っています。 私はトークナイザが Alpha + Beta

のような文字列を区切るしたいが、私が手出力がちょうど最初の要素 Alphaです。

+1

あなたの質問は何ですか? –

+0

空白の 'String#split()'に間違いはありますか? –

+0

@ParagJadhav私のTokenizationメソッドは文字列の方程式全体を分離していません。私は 'A + B'を' A 'に分けなければなりません。 '+' 'C' – Saad

答えて

1
If your input is "Alpha + Beta" , then the below code results in 
Alpha 
+ 
Beta 



StringTokenizer var = new StringTokenizer("Alpha + Beta"," "); 
      while (var.hasMoreElements()) 
      { 
       System.out.println(var.nextToken()); 
      } 
2

equation = input.next();は、方程式全体ではなく、次の(スペースで区切られた)単語を読み込むだけです。

あなたの問題はトークナイザではなく、誤って入力を収集していることです。

が代わりにしてみてください:

equation = input.nextLine(); 
0

は '演算子は' 私は思い+-*/からいずれかを意味することができ、フォーマットA '演算子' Bの場合には、このコード

System.out.println("Enter equation you want to calculate:"); 
    System.out.println("Equation can not have more than two variables"); 
    Scanner input = new Scanner(System.in); 
    String equation = input.nextLine(); 
    StringTokenizer var = new StringTokenizer(equation, " "); 

    while (var.hasMoreElements()) { 
     System.out.println(var.nextToken()); 
    } 
1

をお試しください正規表現で分割することをお勧めします。デモ:Regex101

(\w+)([\+\-\*\/])(\w+) 

まず、不要な混乱を取り除くためにすべてのスペースを置き換えることをお勧めします。また、ダブル\\でエスケープすることを忘れないでください。

は、入力が可能ましょう:String input = "Alpha + Beta";

Pattern pattern = Pattern.compile("(\\w+)(\\+)(\\w+)"); 
Matcher matcher = pattern.matcher(input.replace(" ","")); 

String a = null; 
String b = null; 
String operator = null; 

while (matcher.find()) { 
    a = matcher.group(1); 
    operator = matcher.group(2); 
    b = matcher.group(3); 
} 

変数aoperatorbからAlpha + Betaを返します。

関連する問題