0

我正在尝试从用户字符串中获取数字(如果它有数字)并将这些数字转换为它们的数值。我有以下代码接受用户输入。

例如: java Convert "55s"将只输出数字 55,我将其存储以备后用

{
      char Element = 0;
      double Sum = 0;
      boolean Check = false;

        for(String s: args)  // taking in user input for command line 
        {
            for (int i = 0; i<s.length(); i++)
            {
              Check = true;
              Element = s.charAt(i);          // converting the string into chars
              Sum = convert_to_numb (Element, Check);
              Check = false;
            }
        }

输入是一个字符串,我将其分成字符并将其发送到我的转换函数。我的想法如下

 public static double convert_to_numb (char elem, boolean check)  //trying to convert chars to numbers
  {
      char iter = elem;
      double number = 0;
      int count = 0;

        while (check == true)
        {
             number  =  number +  (iter - 48) * Math.pow(10,count);
             System.out.println(iter);
             count ++;
        }

     return number; 
  }

在这里,我输入字符以查看它们是否是数字并将实际数字转换为它们的整数值。为了澄清我想执行以下任务,给定一个“55”的示例输入,将其转换为 5*10^1 + 5*10^0 = 55。我将不胜感激。谢谢。

4

2 回答 2

0

好吧,我想我可能知道您要完成什么,尽管正如其他人所提到的,这有点不清楚。

为了解决您刚刚发布的代码,我认为它不会像您期望的那样运行。对于初学者来说,布尔变量“Check”目前什么也没做。convert_to_numb 仅在 Check 为真时调用,因此它是多余的。

此外,当您遍历字符串时,总和不会存储在任何地方。每次获得总和时,它都会覆盖前一个。

你的 convert_to_numb 方法更麻烦;它包含一个无限循环。由于 Check 始终设置为“true”,因此您基本上有一个永远不会结束的 while(true) 循环。


我将假设您的目标是解析输入到程序中的任何字符串,以查找连续数字组。然后,您希望将这些数字组存储为整数,如果您找到多个,则可能存储在一个数组中。

像这样的东西可能会奏效。

{
    ArrayList<Integer> discovered = new ArrayList<Integer>();        

    for (String s : args) {

        // contains previous consecutive digits (if any)
        ArrayList<Integer> digits = new ArrayList<Integer>();


        for (int i = 0; i < s.length(); i++) {
            Character c = s.charAt(i);

            // add digit to digit array
            if (c.isDigit()) {
                digits.add(c.getNumericValue())
            }

            // not a digit, so we clear the digit array
            else {

                // combine the array to form an integer
                if (! digits.isEmpty()) {
                    int sum = 0;

                    int counter = 0;
                    for (Integer i : digits) {
                        sum += i * Math.pow(10, counter);
                        counter++;
                    }

                    discovered.add(sum);
                    digits.clear();
                }
            }
        }
    }
}

请注意 ArrayLists 以及 Integer 和 Character 包装类的使用。这些都提供了有助于处理边缘情况的功能。例如,我不确定该(iter - 48)部分是否适用于所有情况。

于 2013-03-16T03:37:46.213 回答
0

像这样的东西:

public static void main(String[] args) {
    String string = "55s";
    String[] piece = string.split("[\\D]+");
    for (int j = 0; j < piece.length; j++) {
        if(piece[j].trim().length() > 0) {
            System.out.println(piece[j]);
        }
    }
}

它会拆分你的初始字符串,其余的你应该自己做。

于 2013-03-16T03:44:20.160 回答