我需要能够读取用户输入并将其拆分以供以后使用。用户可以输入整数或分数和操作,我不知道如何阅读。
用户输入的示例是4/8 – 3/12
或3 + 2/3
或12/16 * 4
或-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());
}
}
答案 0 :(得分:3)
实施regular expressions的力量。
您应该使用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]
答案 1 :(得分:0)
尝试Scanner.nextLine
这将读入用户按下“输入”的时间点。虽然它让你通过自己的解析方法拆分返回的String。有点失败了使用Scanner
的优势。
答案 2 :(得分:0)
应该以{{1}}建议的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
(但这很繁琐)。