我是 Java 的新手,所以我正在尝试编写随机程序来解决这个问题。我正在尝试编写一些将二次方程作为用户输入的东西,如下所示:x^2 + 3x -1
也许这太高级了(或者可能不是),但我想知道如何在循环中一个接一个地提取字符。如果全是数字,我想我可以使用 .isDigit()
并将它们保存到一个数组中,但是因为它们是不同的数据类型,所以我不确定如何去做。到目前为止,我的“代码”看起来像这样
import java.lang.String;
import java.lang.StringBuffer;
import java.util.Scanner;
import java.lang.Character;
public class Lab
{
public static void main(String[] args)
{
Scanner user_input = new Scanner(System.in);
System.out.print("Please input the quadratic equation (ex: 2x^2 + 3x - 2): ");
String request = user_input.nextLine();
int myArr[];
String lettArr[];
for (int i = 0; i <= request.length(); i++)
{
String c = request.charAt(i);
if (request.isDigit(c))
{
myArr[1] += c;
}
if(request.isLowerCase(c))
{
lettArr[1] += c;
}
}
System.out.println(myArr[0]);
}
}
我的 .isDigit()
和 .isLowerCase()
方法不起作用。我认为我在正确的意义上使用它们。这对我的水平来说相当复杂,我想知道这是死胡同还是可接受的策略。
谢谢。
最佳答案
我认为您要做的是从用户输入中提取系数。您的方法可能有效,但在许多情况下您必须考虑(例如 +/- 符号)。相反,你为什么不尝试 Java 的正则表达式
String input = "2x^2 - 4x + 1";
input = input.replaceAll("\\s", ""); //removes all whitespaces
Pattern p = Pattern.compile("(-?\\d+)x\\^2((\\+|-)\\d+)x((\\+|-)\\d+)");
Matcher m = p.matcher(input);
if (!m.matches()) {
System.out.println("Incorrect input");
return;
}
int a, b, c;
a = Integer.parseInt(m.group(1));
b = Integer.parseInt(m.group(2));
c = Integer.parseInt(m.group(4));
System.out.println(String.format("a=%d, b=%d, c=%d", a, b, c));
您可以改编此片段并在您的代码中使用它。然而,我假设你的系数是整数。相反,如果您需要它们,要成为 double
,您必须更改给定正则表达式的格式,并将 Integer.parseInt
更改为 Double.parseDouble
。如果您有兴趣,我可以写得更详细。
关于java - 从字符串中提取字符并按类型放入特定数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19848019/