3

我需要能够读取用户输入并将其分开以供以后使用。用户可以输入整数或小数和一个运算,我不知道如何读入。

用户输入的一个示例是4/8 – 3/12or3 + 2/312/16 * 4or -2/3 / 64/96

现在我正在使用这样的东西:

public class FractionApp 
{
public static void main(String[] args){
    Scanner s = new Scanner(System.in);
    int[] fraction = new int[5];
    String input;
    String operation;
    System.out.println("Enter the expression: ");
    input = s.next();
    StringTokenizer st = new StringTokenizer (input, "/" + " ");
    fraction[0] = Integer.parseInt(st.nextToken());
    fraction[1] = Integer.parseInt(st.nextToken());
    operation = st.nextToken();
    fraction[2] = Integer.parseInt(st.nextToken());
    fraction[3] = Integer.parseInt(st.nextToken());


    }
}
4

3 回答 3

3

实现正则表达式的威力。

您应该使用Scanner.nextLine()来获取输入到控制台的完整行。在String您从Scanner.

public class Test
{
    public static void main(String... args)
    {
        Scanner s = new Scanner(System.in);
        System.out.println("Enter the expression: ");
        String input = s.nextLine();
        String regex = "(?<=[-+*/()])|(?=[-+*/()])";
        System.out.println(Arrays.toString(input.split(regex)));
        s.close();
    }
}

试运行

输入:1.5+4.2*(5+2)/10-4

输出:[1.5, +, 4.2, *, (, 5, +, 2, ), /, 10, -, 4]

于 2013-04-13T01:17:36.803 回答
0

应该按照Tim Bender的建议阅读用户输入nextLine();。然后不知不觉地,一旦您检索到,input您需要在进行任何计算之前对数据进行预处理,以便分离收集的信息。Split

    /**
     * Start the program
     * @param args
     */
    public static void main(String[] args) {
        String inputMessage = null;
        System.out.println("Enter the expression: ");
        //start a scanner
        Scanner in = new Scanner(System.in);
        //store the expression scanned
        inputMessage = in.nextLine();
        //close the scanner
        in.close();
        //if the input has been scanned
        if (inputMessage != null) {

            //do something

        } //close if
    } // close main

我认为找出每个内容的最简单方法是input将其与regular expression. 否则,您也可以尝试使用一大组if conditions或使用 a grammar parser(但这很乏味)。

于 2013-04-13T01:16:49.663 回答
0

试试Scanner.nextLine这个会读到用户按下“输入”时的点。虽然它让您通过自己的解析方法拆分返回的字符串。有点打败了使用Scanner.

于 2013-04-13T01:12:40.477 回答