Java - 如何在到达非数字字符之前创建子字符串?

时间:2016-03-28 03:01:54

标签: java regex string variables numeric

标题不言而喻。我正在尝试创建一个使用基本编码集成多项式函数的计算器,而不仅仅是为数学运算符掏出来为我做:)。我没有走得太远,直到我撞墙,因为我无法找到方法:在原始字符串中创建数字的子字符串,直到达到非数字字符。即如果字符串是123x,我想创建一个123的子字符串,没有'x'。这是我到目前为止所得到的:

public static void indefinite()
{
    int x = 0;
    System.out.print("Enter your function to integrate:\n F ");
    Scanner input = new Scanner(System.in);
    String function = input.nextLine();
    String s1 = "";
    for (int i = 0; i < function.length(); i++)
    {
        s1 = s1 + function.substring(x, i+1);
        x = i+1;
    }
}

这看起来有点荒谬,但基本上,如果字符串'function'是32x ^ 4,我希望子字符串为32.我会自己弄清楚其余部分,但这部分我似乎无法做到。

P.S。我知道for循环的重复变量是错误的,如果我正在查看超过2x ^ 3的函数,它不应该重复到字符串的结尾。我还没有试图解决这个问题,所以我确保它只做了一部分。

2 个答案:

答案 0 :(得分:2)

您可以将字符串拆分为字母数字标记,如下所示:

str.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");

例如,&#34; 123x54y7z&#34;将返回[123, x, 54, y, 7, z]

答案 1 :(得分:1)

使用replaceAll()“提取”它:

String number = str.replaceAll("\\D.*", "");

这将取代第一个非数字及其后的所有内容(实际上删除它),只留下数字。

您也可以直接转到数字原语,而不必使用String变量,如果您愿意(像我一样)拥有更少的代码:

int number = Integer.parseInt(str.replaceAll("\\D.*", ""));