计数输入的数字以空格分隔

时间:2012-11-26 20:39:01

标签: java string count split java.util.scanner

我无法弄清楚如何处理以下问题。

我有一个用户输入,他们可以输入由空格分隔的各种数字,例如(20 30 89 ..) 我需要计算输入了多少个数字(在这种情况下输入了3个数字) 我该怎么做?

我假设这背后的逻辑类似于计算空格数并向其添加1(在它前面没有空格的初始数字),但我不知道如何通过代码执行此操作。 检查在第一个数字之前是否输入了空格也是很好的,如果不是在最终计数中添加+ 1,还要检查诸如双空格,三重空格等之类的内容并将它们计为一个空格。最后看看最后是否没有空格(因此它不会加起来)。

这是我到目前为止所获得的内容(用户输入):

package temperature;

import java.util.*;

/**
 * @author --
 */
public class Histogram {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        // Input for grades
        Scanner input = new Scanner(System.in);
        System.out.println("Enter temperatures below (separated by spaces e.g. 20 30 89 ..)");
        int temperature = input.nextInt();
    }
}

5 个答案:

答案 0 :(得分:3)

  • 只需使用Scanner#nextLine()方法阅读整行。
  • 在一个或多个spaces上拆分读取行 - 使用+量词 该
  • 然后获取array获得的长度。

以下是一个例子: -

if (scanner.hasNextLine()) {
    int totalNumbers = scanner.nextLine().split("[ ]+").length;
}

答案 1 :(得分:1)

如果你只计算空格,你最终可能会将任何垃圾数据作为数字。我建议的是阅读所有输入,直到你到达空格字符。然后尝试将其转换为Integer(或Double),如果转换失败,请对无效输入执行错误处理,否则增加计数器。

一个例子是这样的:

// Sample input used.
    String input = "23 54 343 75.6 something 22.34 34 whatever 12";
    // Each number will be temporarily stored in this variable.
    Double numberInput;
    // Counter used to keep track of the valid number inputs.
    int counter = 0;
    // The index directly after the number ends.
    int endIndex = 0;
    // Now we simply loop through the string.
    for (int beginIndex = 0; beginIndex < input.length(); beginIndex = endIndex + 1) {
        // Get the index of the next space character.
        endIndex = input.indexOf(" ", beginIndex);
        // If there are no more spaces, set the endIndex to the end of the string.
        if (endIndex == -1) {
            endIndex = input.length();
        }
        // Take out only the current number from the input.
        String numberString = input.substring(beginIndex, endIndex);
        try {
            // If the number can be converted to a Double, increase the counter.
            numberInput = Double.parseDouble(numberString);
            counter++;
        } catch (java.lang.NumberFormatException nfe) {
            // Some error handling.
            System.err.println("Invallid input: " + numberString);
        }
    }
    System.out.println("Total valid numbers entered: " + counter);

输出:

Invalid input: something
Total valid numbers entered: 7
Invalid input: whatever
编辑:道歉,我打开了答案窗口,没有看到其他回复。拆分功能应该完美:)

答案 2 :(得分:0)

您可以按空格拆分并计算元素数量:

    System.out.println("20".split (" ").length);
    System.out.println("20 30".split (" ").length);

这将分别打印1和2。

以下是fiddle

答案 3 :(得分:0)

这是我的解决方案。它比使用Split方法的解决方案稍长,但它只包含结果中的数值。所以对于以下输入:

12 32 234 555 24 sdf 4354 dsf34r34 rfedfg 4353

该函数将在数组中返回以下值:

12
32
234
555
24
4354
4353

这是功能:

private static String[] getWholeNumbers(String input) {
    ArrayList<String> output = new ArrayList<String>();

    Pattern pattern = Pattern.compile("\\b\\d+\\b");
    Matcher matcher = pattern.matcher(input);
    while (matcher.find()) {
        output.add(matcher.group());
    }
    return output.toArray(new String[output.size()]);
}

如果您只需要计数,则可以轻松更改该功能。

答案 4 :(得分:0)

如果您可以将输入作为字符串,然后从字符串中检索数字,那会更好。

Scanner input=new Scanner(System.in);
String st=input.nextLine();
String[] split=st.split(" ");
ArrayList<Integer> temp=new ArrayList<>();
String regex="^[0-9]+$";
     for(int i=0;i<split.length;i++)
     {
         if(split[i].matches(regex)) temp.add(Integer.parseInt(split[i]));
     }

现在你将所有的温度都设为ArrayList<Integer>