从一串不同的字符中返回整数

时间:2015-09-04 13:17:13

标签: java

我在正确打印此字符串时遇到问题。 " 34 + 23 * 15 + -10 // ** =?="。 它存储在一个名为String input的变量中; 我试图将每个不同的变量类型分成不同的标记。 因此,例如,如果我找到整数,我将它们分组,如果我找到符号,我将它们分组。

我检查了2位数的整数。但我在检查XX,XXX,XXXX的整数时遇到问题。意思是不同数字的整数,而不仅仅是两位数

if(Character.isDigit(input.charAt(i)) && Characted.isDigit(input.charAt(i+1)){ //checking for integers
    count++;
    temp = input.substring(input.charAt(i), input.charAt(i+1));
    count = Integer.parseInt(temp);

    continue;   
}

3 个答案:

答案 0 :(得分:2)

你应该看看regular expressions。这是如何从字符串中提取数字的示例:

      List<Integer> numbers = new ArrayList<Integer>();
      Pattern pattern = Pattern.compile("-?\\d+");
      Matcher matcher = pattern.matcher(str);
      while (matcher.find()) {
         numbers.add(Integer.valueOf(matcher.group()));

这甚至适用于负数,如果我没有错误的十进制数字。

答案 1 :(得分:0)

您是否在询问如何编写for循环?

int j; // Declaration outside for, so the variable persists
for(j = i; Character.isDigit(input.charAt(j)); ++j); // Semicolon to do nothing in the loop, besides increasing j.
if(j > i)
{
    count = Integer.parseInt(input.substring(i, j));
    continue;
}

我遗漏了count++因为你无论如何都要覆盖它,不知道你打算在那里做什么。

答案 2 :(得分:0)

这里有几个选项。您可以修改您正在使用的方法。如果你保存到目前为止的数字并执行:

String numberSofar = "";
for(char c : inputString){
   if(Character.isDigit(c)
      numberSoFar+=c;
   else{
      digits+= Integer.parseInt(c);
   }
}

这样的东西会起作用,但它有一些缺点。这是相当慢的,它很慢(除非你有数百万的数字,但仍然......),这可能无关紧要。

另一种选择是使用正则表达式。

  int sum = 0;
  Pattern pattern = Pattern.compile("\\d+");
  Matcher matcher = pattern.matcher(str);
  while (matcher.find()) {
     sum += Integer.parseInt(matcher.group()));

然而,如果你真的想要获得不是数字的东西,它会变得更复杂(或者你可以做两个循环,只是寻找与你第一次看到的相反的东西。^将允许你这样做。